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

#java #hibernate

#java #гибернация

Вопрос:

Вот сценарий:

  1. Один объект / объект загружается из базы данных с помощью гибернации.
  2. Перед повторным сохранением этого объекта в БД выполняются некоторые манипуляции с этим объектом
  3. Мне нужно состояние объекта таким, какое оно есть в БД, то есть до изменения исходного состояния объекта, поэтому я снова загружаю объект из базы данных в новый экземпляр объекта.
  4. Я использую второй загруженный объект (этот объект больше не взаимодействует с БД)
  5. Сначала загруженный объект (с шага 1) сохраняется в базе данных для обновления его состояния и генерируется это исключение: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:...

Я понимаю, что в одном сеансе гибернации можно использовать не более одного объекта объекта. Но мне нужен объект с шага 3. только для извлечения его текущего состояния из базы данных, поэтому hibernate не нужно каким-либо образом отслеживать его, он мне просто нужен как POJO. Есть ли какой-либо способ удалить его из сеанса / кэша или где бы то ни было, где этот экземпляр хранится в режиме гибернации?

Ответ №1:

Каждый EntityManager, он же PersistenceContext, он же HibernateSession, имеет свой собственный кеш. Просто создайте второй и снова загрузите объект из базы данных, не вмешиваясь в первый. Пока первый объект не синхронизировал изменения с базой данных, вы получите исходные значения. Просто убедитесь, что вы знаете, когда синхронизация (иначе слияние) происходит именно в вашем приложении.

Комментарии:

1. Это решило проблему, большое вам спасибо.