本文介绍了EJB / JPA:如何使用EntityManager.persist()来始终插入一个新的记录,而不是更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
EntityManager.persist()函数正在尝试更新现有记录,但是我总是需要插入一个新的记录。如何实现?
EntityManager.persist() function is trying to update a existing record, but I always need to insert a new one. How to achieve this?
Entity bean的一部分:
Part of Entity 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的一部分,它持续记录: / p>
Part of Stateless bean, which persists the record:
@Stateless
public class TriggerPersister {
@PersistenceContext(unitName="syncTriggerDS")
protected EntityManager entityManager;
public <T extends GenericTrigger> void persistTrigger(SyncTrigger
st, T concreteTrigger){
entityManager.persist(st);
.........
UPD:
在entityManager之前.persist(st)被执行st.triggerId值为null,但是以前添加的记录的after-id被分配给该字段。
UPD:Before entityManager.persist(st) is executed st.triggerId value is null, but after - id of previously added record is assigned to this field.
推荐答案
总是尝试创建一个新的托管对象。如果您在已管理的实体上调用,则会抛出 EntityExistsException
。
您必须使用 merge()
进行更新。
查看这两种方法的javadoc。
See the javadoc for both methods.
这篇关于EJB / JPA:如何使用EntityManager.persist()来始终插入一个新的记录,而不是更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!