2013-03-06 4 views
1

J'utilise EclipseLink 2.1.3 avec un EntityManager géré par conteneur pour s'interfacer avec une base de données Oracle 11g.EclipseLink 2.1.3, Oracle 11g, retour PK après persistance avec la persistance gérée par le conteneur

Je souhaite que la variable @Id d'une entité soit mise à jour immédiatement après l'appel de persist() sur l'EM.

Quelle est la stratégie correcte pour le faire avec une base de données Oracle?

Aucun des exemples que j'ai trouvés sur ce site ne traite de ce problème de persistance gérée par conteneur.

L'entité se présente comme suit:

@Entity 
    @Table(name = "ANNOUNCEMENT_DELIVERY_LOG") 
    public class AnnouncementDeliveryLog implements Serializable { 

     @Id 
     private BigDecimal id; 
     @ManyToOne 
     @JoinColumn(name = "ANNOUNCEMENT_ID ") 
     private Announcements announcement; 

     public AnnouncementDeliveryLog() { 
     } 

    } 

Ai-je besoin d'ajouter quelque chose comme ce qui suit?

@Column(nullable = false) 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ANNOUNCEMENT_DELIVERY_LOG_SEQ") 
@SequenceGenerator(name="ANNOUNCEMENT_DELIVERY_LOG_SEQ", sequenceName="ANNOUNCEMENT_DELIVERY_LOG_SEQ") 

Pour conserver l'entité, j'appelle simplement persist(). Dois-je aussi appeler flush()?

+0

Pouvez-vous nous montrer la définition de champ PK de classe de l'entité, y compris ses annotations? – MRalwasser

Répondre

1

Oui, vous devez fournir une annotation @SequenceGenerator pour que JPA affecte automatiquement un nouvel ID à l'entité pendant persist().

Un rinçage n'est pas nécessaire.

+0

Est-ce que mon annotation @SequenceGenerator suggérée semble correcte? – retrodev

+0

Oui, si la séquence correspondante est nommée ANNOUNCEMENT_DELIVERY_LOG_SEQ – MRalwasser

Questions connexes