EJB/JPA:如何使用 EntityManager.persist() 始终插入新记录,而不是更新



EntityManager.persist() 函数正在尝试更新现有记录,但我总是需要插入一个新记录。如何实现这一点?

实体 Bean 的一部分:

@Entity
@Table(name="SYNC_TRIGGER", schema="ETL")
public class SyncTrigger implements Serializable {
    @Id
    @Column(name="ID")
    @SequenceGenerator(name = "TRIGGER_SEQ", sequenceName = "ETL.TRIGGER_SEQ")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TRIGGER_SEQ")
    private Long triggerId;
......

无状态 bean 的一部分,它保留了记录:

@Stateless
public class TriggerPersister {
    @PersistenceContext(unitName="syncTriggerDS") 
    protected EntityManager entityManager;
    public <T extends GenericTrigger> void persistTrigger(SyncTrigger 
            st, T concreteTrigger){
            entityManager.persist(st);
.........

上级:在执行 entityManager.persist(st) 之前,st.triggerId 值为空,但在 - 之后 - 将先前添加的记录的 id 分配给此字段。

EntityManager.persist()总是尝试创建新的托管对象。如果在已托管的实体上调用它,则会引发EntityExistsException

您必须使用merge()进行更新。

有关这两种方法,请参阅 javadoc

最新更新