Hibernate: evict () постоянный объект при сохранении его изменений - PullRequest
16 голосов
/ 27 июля 2011

У меня есть постоянный объект гибернации, полученный с помощью session.save(object)

Я изменил его с тех пор.

Я хочу выполнить session.evict(object), чтобы сохранить память, как я сделал с объектом.

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

Я мог бы позвонить session.flush(), но это сбросило бы все изменения.

Как я могу сохранить изменения, внесенные в объект?один постоянный объект до выселения?

Ответы [ 3 ]

18 голосов
/ 27 июля 2011

Позвоните session.save(object) или session.saveOrUpdate(object), тогда вы можете позвонить в нее, если потребуется. Тем не менее, вы должны очистить сессию, прежде чем делать это. Сессия спроектирована как интерфейс, основанный на единицах работы, и на то есть веская причина - семантика транзакций была бы катастрофой без этой функции. Если вам нужно сбросить отдельные сущности, не стирая другие, которые являются частью одного и того же сеанса, вам необходимо переосмыслить свою единицу работы.

4 голосов
/ 27 июля 2011

Выполнение session.evict(obj) удалит экземпляр объекта из кэша сеанса.Поэтому, если вы сохраняете объект в первый раз, вам придется явно зафиксировать с помощью session.save(obj), прежде чем удалять объект из кэша.Последующие вызовы обновления должны выполняться через session.saveOrUpdate(obj) или session.update(obj) перед вызовом evict, чтобы удалить загруженный объект из кэша.

Это означает, что вам придется явно вызывать session.load(obj) или session.get(obj), когда вынужен экземпляр объекта обратно в кеш.

0 голосов
/ 27 июля 2011

Не могли бы вы сначала сохранить объект вручную с помощью чего-то вроде

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