Может ли кто-нибудь помочь мне понять пример, когда именно постоянный объект становится отдельным объектом?
Он становится отсоединенным, когда:
Зависит от используемого контекста персистентности (транзакции или расширенного). См. Эту ссылку для описания. В основном в соответствии с другим ответом ЗА ИСКЛЮЧЕНИЕМ, что ответ пропускает отрыв, когда транзакция совершается при использовании транзакции PersistenceContext
Я думаю, что лучшее понимание того, когда компания отделяется, смотрит на то, что спецификация JPA говорит о жизненном цикле объекта.
Отдельный экземпляр объекта представляет собой экземпляр с постоянным идентификатором, который не является (или не более) связан с контекстом персистентности.
Это означает, что объект может считаться отсоединенным, даже если он вновь создан. Скажем, что наша сущность A
имеет свой id, обозначенный как @Id @GeneratedValue
. Таким образом, в основном поставщик JPA позаботится о присвоении идентификатора. Но если вы укажете A
id явно (например, a.setId(1)
), а затем передадите его на persist()
вы получите Исключение.