Как знать, был ли отдельный объект JPA уже сохранен или нет?

У меня есть экземпляр объекта JPA в веб-уровне UI моего приложения. Я хотел бы знать в любое время, если этот объект был уже сохранен в базе данных или если это только присутствует на сеансе пользователя.

Это было бы в бизнес-слое, я буду использовать entitymanager.contains (Объект) метод, но в моем уровне UI я думаю, что мне нужен дополнительный атрибут, указывающий, был ли объект сохранен или нет. Как реализация это? Я рассматриваю следующую возможность в настоящий момент:

  • атрибут JPA со значением по умолчанию, установленным базой данных, но, вызвал бы новое чтение после каждого обновления?
  • не JPA приписывает вручную установленный в моем коде или автоматически установленный JPA?

Совет / другие предложения?

Я использую JPA 1 с, в спящем режиме 3,2 реализации и предпочел бы, придерживаются стандарта.

27
задан snowflake 6 May 2010 в 10:00
поделиться

1 ответ

Во-первых, напомним различные состояния объекта. Из спецификации JPA 1.0 (в разделе 3.2 Жизненный цикл экземпляра сущности):

В этом разделе описаны операции EntityManager для управления жизненным циклом экземпляра сущности. Экземпляр объекта может быть охарактеризован как новый, управляемый, отсоединенный или удаленный.

  • Новый экземпляр объекта не имеет постоянного идентификатора и еще не связан с контекстом постоянства.
  • Экземпляр управляемого объекта - это экземпляр с постоянным идентификатором , который в настоящее время связан с контекстом постоянства.
  • Отдельный экземпляр объекта - это экземпляр с постоянным идентификатором , который не связан (или больше не связан) с контекстом постоянства.
  • Экземпляр удаленного объекта - это экземпляр с постоянным идентификатором, связанный с контекстом постоянства, который запланирован для удаления из базы данных.

И графическая иллюстрация:

alt text

Итак, по определению, отдельная сущность уже существует, и я на самом деле не думаю, что это ваш настоящий вопрос. Теперь, если вы хотите узнать, является ли объект новым (т.е. не имеет постоянного идентификатора), как насчет этого:

@Transient
public boolean isNew() {
    return (this.id == null);
}
46
ответ дан 28 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: