GAE с JPA: обновить сущность - PullRequest
       2

GAE с JPA: обновить сущность

1 голос
/ 13 сентября 2011

У меня проблемы с обновлением сущностей в Googles App Engine.

EntityManager em = ... // constructed like in the doc

MyEntity myE = new MyEntity();
myE.setType("1");      // String
em.persist(myE);em.refresh(myE);

myE.setType("2");
em.merge(myE);em.refresh(myE);

Я ожидаю сущность с type="2", но есть только одна сущность с type="1": - (

Ответы [ 3 ]

2 голосов
/ 13 сентября 2011

Это правильное поведение, позвольте мне объяснить (я предполагаю, что весь ваш код выполняется в одном контексте постоянства / транзакции).

# This line sets the value in the in-memory object without changing the database
myE.setType("2");

# this line doesn't do anything here, as the entity is already managed in the current 
# persistence context. The important thing to note is that merge() doesn't save the 
# entity to the DB.
em.merge(myE);

# This reloads the entity from the DB discarding all the in-memory changes.
em.refresh(myE);
0 голосов
/ 08 июня 2013

Я тоже столкнулся с подобной проблемой.Моя проблема решена после того, как я поставил Reresh () после Commit ().

Это было бы что-то вроде:

em.getTransaction().begin();
//Code to update the entity
em.persist(myE);
em.getTransaction().commit();
em.refresh(myE)

Это обеспечит обновление обновленной сущности в JPA Cache с помощьюобновленные данные.Надеюсь, это поможет.

0 голосов
/ 13 сентября 2011

Это потому, что слияние создает новый экземпляр вашей сущности, копирует состояние из предоставленной сущности и управляет новой копией. Вы можете найти больше информации о слиянии и сохранении здесь и полном обсуждении этого вопроса здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...