2015-11-07 12 views
2

В JPA:
является экземпляром класса сущностей с ID набор считается отдельностоящий даже если it'has был только что создан?JPA: отдельностоящий против переходных определений

или аналогичным образом:

является экземпляром класса сущностей с ID не установлен всегда считал переходная?

Я прошу об этом, потому что часто методы jpa имеют разные поведения в двух случаях.

ответ

3

Разница между transient и detached Состояние не определяется самим объектом. Учитывая экземпляр объекта, не всегда возможно быть на 100% уверенным, если он временно или отсоединен. Разница только логическая - экземпляр сущности отделяется по определению, когда он был ранее привязан к контексту персистентности. Это также означает, что в базе данных базы данных есть соответствующая запись.

С другой стороны, ответ на второй вопрос о является да - лицо без ID еще не сохранялось (прилагается), поэтому она должна быть еще преходящи. Это единственная ситуация, когда вы можете быть уверены в состоянии. Поскольку отдельный объект соответствует записи в базе данных и потому что идентификатор является обязательным для сохраняемых объектов в JPA, отдельный объект должен иметь идентификатор (назначенный в вашем коде или назначенный автоматически поставщиком JPA).

Вот тщательное объяснение сущности жизненных цикла государств и действительных действий, которые делают переходы между состояниями: Entity lifecycle management

Несмотря на то, что юридическое лицо считается detached только тогда, когда ранее attached, можно создать фальшивый отдельностоящий объект без предварительной установки. Но это в основном хак и не поддерживается спецификацией. В большинстве случаев достаточно установить правильный id. Однако, если вы используете столбец @Version для оптимизации блокировки, вы также должны установить правильное значение для этого столбца. И может случиться так, что у вас все еще возникают проблемы, если вы используете другие нестандартные механизмы поставщиков JPA.

Смежные вопросы