Quando l’JPA imposta un @GeneratedValue @Id

Ho una semplice quadro JPA che usa un “ID” long generato come sua chiave primaria:

 @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 } 

Ad un certo punto del ciclo di vita di un object di questo tipo, il JPA deve chiamare setId() per registrare il valore dell’ID generato. La mia domanda è, quando succede questo, e dov’è la documentazione che lo afferma . Ho esaminato le Specifiche JPA e non riesco a trovare una dichiarazione chiara.

La specifica JPA dice (enfasi aggiunta):

Un’istanza entity framework gestita è un’istanza con un’identity framework persistente attualmente associata a un contesto di persistenza.

Si sta cercando di dire che l’object deve essere gestito per avere il suo @Id significativo? La documentazione per EntityManager.persist() dice (enfasi aggiunta) rende “un’istanza gestita e persistente”, quindi vuol dire che l’ @Id è impostato con quel metodo? O lo è fino a quando non chiami EntityTransaction.commit() ?

    Quando l’ @Id è impostato potrebbe essere diverso per i diversi provider JPA e forse per diverse strategie di generazione. Ma qual è il presupposto più sicuro (portatile, conforms alle specifiche) che è ansible fare circa il primo punto del ciclo di vita che è stato impostato?