EJB / JPA:如何使用EntityManager.persist()来始终插入一个新的记录,而不是更新 [英] EJB/JPA: How to use EntityManager.persist() to always INSERT a new record, not update

查看:168
本文介绍了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.

推荐答案

EntityManager.persist() 总是尝试创建一个新的托管对象。如果您在已管理的实体上调用,则会抛出 EntityExistsException

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

查看这两种方法的javadoc。

See the javadoc for both methods.

这篇关于EJB / JPA:如何使用EntityManager.persist()来始终插入一个新的记录,而不是更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆