В Hibernate ты можешь определить состояние объекта, используя специальные методы из JPA API. Вот три подхода:
Объект находится в управляемом состоянии, когда его активно отслеживает текущая сессия Hibernate. Чтобы это проверить:
EntityManager.contains(object)true, объект управляемыйОбъект находится в отсоединённом состоянии, когда раньше его отслеживала сессия, но сейчас он с ней не связан. Чтобы это определить:
PersistenceUnitUtil.getIdentifier(object)Объект находится в временном состоянии, когда Hibernate его никогда не отслеживал и у него нет постоянного идентификатора. Чтобы это подтвердить:
PersistenceUnitUtil.getIdentifier(object)null, объект временныйТы можешь получить PersistenceUnitUtil через EntityManagerFactory:
PersistenceUnitUtil util = entityManagerFactory.getPersistenceUnitUtil();
Object identifier = util.getIdentifier(object);
Главное отличие в том, что управляемые объекты проверяются через EntityManager.contains(), а отсоединённое и временное состояния различаются тем, вернёт ли PersistenceUnitUtil.getIdentifier() значение или null.
Метод EntityManager.contains() возвращает true только для объектов в persistent состоянии, которые активно управляются текущей сессией.
Новый — ещё не проверен сообществом
Вы