2013-03-06 62 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