как мы можем заставить работать JPA EntityManager Flush - PullRequest
17 голосов
/ 14 января 2012

мой вопрос, почему не работает flush:

public void ejbService(){
   Customer c = em.find(Customer.class,1);
   c.setName("newName");
   em.flush();
   //at this point when I query mysql table I can not see "newName"


   thread.sleep(10000);

   c.setName("anotherName");
}

После завершения метода я вижу "anotherName" в БД также я проверяю это с em.find (Customer.class, 1, Lock.None); но все равно не работает

УВАЖЕНИЕ

1 Ответ

23 голосов
/ 14 января 2012

Вы очищаете, но не фиксируете - или иным образом завершаете транзакцию / сеанс, который, вероятно, настроен для автоматической фиксации.

Да, после вызова flush() СУБД теперь знает о ваших данных - но, следуя стандартам ACID, никакие другие сеансы базы данных не увидят эти данные, пока СУБД не получит указание их зафиксировать.

Не зная дополнительных подробностей об архитектуре остальной части вашего приложения и т. Д., Вы, вероятно, хотите сделать что-то вроде:

em.getTransaction().commit();
...