EclipseLink 2.1.3,Oracle 11g,在持久化容器管理持久性后返回PK

时间:2013-03-06 11:26:33

标签: oracle jpa eclipselink

我正在使用带有容器管理的EntityManager的EclipseLink 2.1.3来与Oracle 11g数据库连接。

我想在EM上调用persist()后立即更新Entity的@Id变量。

使用Oracle DB执行此操作的正确策略是什么?

我在此站点上找到的所有示例都没有解决容器管理持久性问题。

实体看起来像这样:

    @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()?

1 个答案:

答案 0 :(得分:1)

是的,您必须提供@SequenceGenerator注释,以便JPA在persist()期间自动为实体分配新ID。

不需要冲洗。