У меня есть простая сущность JPA, которая использует сгенерированный длинный
«ID» в качестве своего первичного ключа:
@Entity
public class Player {
private long id;
protected Player() {
// Do nothing; id defaults to 0L
}
@GeneratedValue
@Id
public long getId() {
return id;
}
protected void setId(final long id) {
this.id = id;
}
// Other code
}
В какой-то момент жизненного цикла объекта этого типа JPA должен вызвать setId ()
для записи сгенерированного значения ID. Мой вопрос: , когда это происходит, и где находится документация, которая утверждает это . Я просмотрел спецификацию JPA и не нашел четкого заявления.
Спецификация JPA гласит (курсив добавлен):
Экземпляр управляемого объекта - это экземпляр с постоянным идентификатором , который в настоящее время связан с постоянным контекстом.
Это попытка сказать, что объект должен управляться , чтобы его @Id
был значимым?
В документации для EntityManager.persist ()
говорится (выделение добавлено), что он делает «экземпляр управляемым и постоянным», значит ли это, что @Id
является установлен этим методом? Или нет, пока вы не вызовете EntityTransaction.commit ()
?
Когда установлен @Id
, он может отличаться для разных поставщиков JPA и, возможно, для разных стратегий генерации.Но каково самое безопасное (переносимое, соответствующее спецификации) предположение, которое вы можете сделать о самой ранней точке жизненного цикла, которая была установлена?