Quand la JPA définir un @GeneratedValue @Id

J'ai un simple JPA entité qui utilise un générés long "ID" comme clé primaire:

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

À un certain moment dans le cycle de vie d'un objet de ce type, le PCA doit appeler setId() pour enregistrer l'IDENTIFIANT généré de la valeur. Ma question est, quand est-ce possible, et où est la documentation que les membres de cette. J'ai regardé à travers la Spécification JPA et ne peut pas trouver un énoncé clair.

La Spécification JPA dit (italiques ajoutés):

Une entité gérée instance est une instance avec une persistante identité qui est actuellement associée à un contexte de persistance.

Est que d'essayer de dire que l'objet doit être géré avoir son @Id importante?
La documentation pour EntityManager.persist() dit (emphase ajoutée), il fait "une instance géré et persistante", cela veut-il dire que le @Id est défini par cette méthode? Ou n'est-il pas jusqu'à ce que vous appelez EntityTransaction.commit()?

Lorsque le @Id est défini peut être différente pour différents JPA fournisseurs, et peut-être pour les différentes stratégies de génération. Mais ce qui est le plus sûr (portable, spécification conforme) hypothèse que vous pouvez faire sur le premier point dans le cycle de vie qu'elle a été définie?

  • Sonne comme quelque chose que vous pourrait s'établir assez facilement avec le débogage.
  • Je serais prêt à parier que si spec n'est pas explicitement dire lorsque le @code doit être généré que c'est à gauche pour les vendeurs de décider.
  • Débogage vais vous dire comment APP fonctionne en interne, et vous dire les bits sont dialecte spécifique.
  • Liées, mais pas en double, question: stackoverflow.com/questions/8169640/...
InformationsquelleAutor Raedwald | 2012-01-31