Как вставить данные в таблицу с помощью Entity Manager с помощью Spring MVC

== сравнивает ссылки на объекты.

.equals() сравнивает значения String.

Иногда == дает иллюзии сравнения значений String, как в следующих случаях:

String a="Test";
String b="Test";
if(a==b) ===> true

Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:

(a == b) ===> true

                       String Pool
     b -----------------> "test" <-----------------a

Однако == не выполняется в следующем случае:

String a="test";
String b=new String("test");
if (a==b) ===> false

В этом случае для new String("test") оператор new String будет создан в куче, и эта ссылка будет указана на b, поэтому b будет дана ссылка на кучу, а не на String pool.

Теперь a указывает на String в пуле String, а b указывает на String в куче. Из-за этого мы получаем:

, если (a == b) ===> false.

                String Pool
     "test" <-------------------- a

                   Heap
     "test" <-------------------- b

Пока .equals() всегда сравнивает значение String, поэтому дает true в обоих случаях:

String a="Test";
String b="Test";
if(a.equals(b)) ===> true

String a="test";
String b=new String("test");
if(a.equals(b)) ===> true

Таким образом, использование .equals() всегда лучше.

0
задан Tony 10 March 2019 в 01:02
поделиться

2 ответа

Во-первых, нулевой указатель возникает, потому что у вас есть поле entityManagerFactory, которое вы никогда не инициализируете, и, таким образом, оно имеет значение null, но вы вызываете entityManagerFactory.createEntityManager() (таким образом, это вызов null.createEntityManager()) при инициализации поля entityManager .

Вы могли бы попытаться поместить @Autowired аннотацию над entityManagerFactory - но я не понимаю, почему вы не проводите entityManager с помощью Autowire, предоставленной Spring, а вместо этого создаете свою собственную.

Также, похоже, у вас есть @PersistenceContext аннотация на entityManager - эта должна внедрить существующую entityManager в случае, если вы работаете внутри контейнера EJB или используете CDI для внедрения зависимостей, я думаю - но вы этого не делаете , вы используете аннотацию @Repository, пришедшую из Spring. И вы сами инициализируете поле. Эту аннотацию обязательно нужно удалить (я полагаю, что вы положили ее туда, чтобы добавить entityManager, но когда это не сработало, вы добавили код инициализации - entityManagerFactory.createEntityManager()). Или лучше - заменить на @Autowire, и вместо этого код инициализации должен быть удален.

например. просто есть

@Repository
public class CustomerInsertRepository {

@Autowired
private EntityManager entityManager;
...
0
ответ дан mvmn 10 March 2019 в 01:02
поделиться

Вероятно, метод createEntityManager () является статическим

. Попробуйте:

@PersistenceContext
private EntityManager entityManager = 
EntityManagerFactory.createEntityManager();

Instaead

@PersistenceContext
private EntityManager entityManager = 
entityManagerFactory.createEntityManager();
.
0
ответ дан Juan Daniel Ornella 10 March 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: