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  void persistTrigger(SyncTrigger st, T concreteTrigger){ entityManager.persist(st); ......... 

UPD:在执行entityManager.persist(st)之前st.triggerId值为null,但是之后添加的记录的id-id被分配给该字段。

EntityManager.persist()始终尝试创建新的托管对象。 如果在已经管理的实体上调用它,则会抛出EntityExistsException

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

请参阅两种方法的javadoc。