Подтвердить что ты не робот

Hibernate: evict() постоянный объект при сохранении изменений

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

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

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

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

Я мог бы назвать session.flush(), но это приведет к сбросу всех изменений.

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

session.saveOrUpdate(theObject);
session.evict(theObject);