У меня есть экземпляр объекта JPA в веб-уровне UI моего приложения. Я хотел бы знать в любое время, если этот объект был уже сохранен в базе данных или если это только присутствует на сеансе пользователя.
Это было бы в бизнес-слое, я буду использовать entitymanager.contains (Объект) метод, но в моем уровне UI я думаю, что мне нужен дополнительный атрибут, указывающий, был ли объект сохранен или нет. Как реализация это? Я рассматриваю следующую возможность в настоящий момент:
Совет / другие предложения?
Я использую JPA 1 с, в спящем режиме 3,2 реализации и предпочел бы, придерживаются стандарта.
Во-первых, напомним различные состояния объекта. Из спецификации JPA 1.0 (в разделе 3.2 Жизненный цикл экземпляра сущности):
В этом разделе описаны операции EntityManager для управления жизненным циклом экземпляра сущности. Экземпляр объекта может быть охарактеризован как новый, управляемый, отсоединенный или удаленный.
- Новый экземпляр объекта не имеет постоянного идентификатора и еще не связан с контекстом постоянства.
- Экземпляр управляемого объекта - это экземпляр с постоянным идентификатором , который в настоящее время связан с контекстом постоянства.
- Отдельный экземпляр объекта - это экземпляр с постоянным идентификатором , который не связан (или больше не связан) с контекстом постоянства.
- Экземпляр удаленного объекта - это экземпляр с постоянным идентификатором, связанный с контекстом постоянства, который запланирован для удаления из базы данных.
И графическая иллюстрация:
Итак, по определению, отдельная сущность уже существует, и я на самом деле не думаю, что это ваш настоящий вопрос. Теперь, если вы хотите узнать, является ли объект новым (т.е. не имеет постоянного идентификатора), как насчет этого:
@Transient
public boolean isNew() {
return (this.id == null);
}