2013-03-06 83 views
1

我正在使用EclipseLink 2.1.3和一個容器管理的EntityManager與Oracle 11g數據庫接口。EclipseLink 2.1.3,Oracle 11g,在持久化容器管理持久性後返回PK

我希望在EM調用persist()後立即更新實體的@Id變量。

對於Oracle數據庫來說這樣做的正確策略是什麼?

我在這個網站上找到的例子都沒有用容器管理的持久性來解決這個問題。

實體看起來是這樣的:

@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() { 
     } 

    } 

我是否需要添加類似下面?

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

堅持實體我只是調用persist()。我是否也需要調用flush()?

+0

你能告訴我們實體的類PK字段定義,包括其註釋嗎? – MRalwasser 2013-03-06 11:31:54

回答

1

是的,您必須提供@SequenceGenerator註釋,以便JPA在persist()期間自動爲實體分配新ID。

沖洗不是必需的。

+0

我建議的@SequenceGenerator註釋看起來是否正確? – retrodev 2013-03-06 11:41:11

+0

是的,如果相應的序列被命名爲ANNOUNCEMENT_DELIVERY_LOG_SEQ – MRalwasser 2013-03-06 11:43:59