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。
- 没有使用拦截器绑定调用拦截器方法
- EntityManager的find()方法是否创建了JPA类的新实例?
- 如何在WebSphere上为远程EJB调用启用Kerberos身份validation?
- Java EE 7 – @Decorator,@ Stateless和@PersistenceContext = nullpointerException
- 如何使用Pooled Spring bean而不是Singleton?
- DDD和应用层
- UserTransaction如何传播?
- 如何在EJB中提交事务?
- javax.persistence.NoResultException:getSingleResult()没有检索任何实体