Получение объекта состояния - PullRequest
5 голосов
/ 14 мая 2009

Предоставляет ли hibernate метод, который возвращает состояние объекта (временное, постоянное, отключенное)?

Ответы [ 3 ]

3 голосов
/ 14 мая 2009

Session.contains сообщает, связан ли объект с сеансом. Если у него нет идентификатора, он временный, если у него есть идентификатор и связанный с сеансом, постоянный. Идентификатор, но не связанный с сеансом, отсоединен.

Если это не поможет, подумайте над тем, чтобы перефразировать ваш вопрос в более широком контексте, то есть зачем вам вообще нужно знать состояние объекта?

3 голосов
/ 14 мая 2009

см. Javadoc Hibernate Session и проверьте методы

  • содержит - Проверьте, связан ли этот экземпляр с этим сеансом.
  • getIdentifier - Возвращает значение идентификатора данного объекта, связанного с этим сеансом. Остерегайтесь исключения, которое выдается, если сущность не связана, каждое исключение следует считать фатальным, и после него не следует использовать сеанс
  • get - Возвращает постоянный экземпляр данного класса сущностей с заданным идентификатором, или ноль, если такого постоянного экземпляра нет.

Я бы использовал 'get' и, кроме того, проверил наличие измененных значений, после этого это всего лишь "saveOrUpdate" для сохранения или обновления (и повторного присоединения) реального объекта

0 голосов
/ 18 июля 2013

Я не согласен с использованием session.contains(obj) для выявления состояния спящего объекта. Объект, ранее сохраненный / загруженный, будет считаться переходным после простого вызова session.clear() - если у вас нет первичного ключа, кроме составного, вы не представляете, в каком состоянии он находится ...

В Hibernate 3 можно найти правильный подход: org.hibernate.engine.ForeignKeys.isTransient (...)

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