Сохраняет ли JPA / Hibernate даже если вызов не сохраняется? - PullRequest
8 голосов
/ 08 февраля 2012
em.getTransaction().begin();

StringData sd = em.find(StringData.class, key);
System.out.println("Old value: " + sd.getData());
sd.setData(newValue);
// em.persist(sd);

em.getTransaction().commit();

Как видите, я не звоню persist, это закомментировано, потому что я сначала запускаю этот код.Однако, как оказалось, не так уж и сухо.После проверки базы данных я вижу, что данные изменены (к счастью, это тестовая база данных).

Видимо, мое понимание Hibernate / JPA неверно.Разве для изменения данных не требуется всегда звонить persist?А если нет, то каковы правила, когда что-то сохраняется ?

Ответы [ 2 ]

10 голосов
/ 08 февраля 2012

Да, управляемые объекты сохраняются, когда выполняется очистка (очистка также выполняется с фиксацией), если обнаруживается какое-либо изменение, это называется грязной проверкой.

3 голосов
/ 08 февраля 2012
StringData sd = em.find(StringData.class, key);

Эта строка кода извлекает экземпляр StringData sd из сеанса em. Любые внесенные вами изменения будут сохранены на флэш-памяти (когда транзакции заканчиваются), поскольку экземпляр объекта связан с сеансом em (т. Е. Управляется).

Вы можете отсоединить его или вернуть из метода.За пределами транзакции он не связан с сеансом em, и изменения не будут сохранены до тех пор, пока он не будет повторно присоединен посредством слияния.

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