У меня есть простая сущность JPA, которая использует сгенерированный long
"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()
, чтобы записать сгенерированное значение идентификатора. У меня вопрос: , когда это происходит, и , где находится документация, в которой говорится . Я просмотрел спецификацию JPA и не могу найти четкого утверждения.
Спецификация JPA гласит (выделение добавлено):
Экземпляр управляемого объекта - это экземпляр с постоянным идентификатором , который в настоящее время связан с постоянным контекстом.
Это пытается сказать, что объект должен быть управляемым , чтобы иметь его @Id
значимым?
Документация для EntityManager.persist()
говорит (выделение выделено), что делает "экземпляр управляемым и постоянным", значит ли это, что @Id
устанавливается этим методом? Или пока вы не позвоните EntityTransaction.commit()
?
Когда установлен @Id
, может отличаться для разных поставщиков JPA и, возможно, для разных стратегий генерации. Но какое самое безопасное (переносимое, соответствующее спецификации) предположение, которое вы можете сделать о самом раннем этапе жизненного цикла, который был установлен?