У меня есть простой объект 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 и, возможно, для разных стратегий генерации. Но что является самым безопасным (переносимым, соответствующим спецификации) предположением, которое вы можете сделать о самой ранней точке жизненного цикла, которую он установил?