1

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;
......

Stateless bean 的一部分,它保留了记录:

@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,但在之前添加的记录的 -id 之后分配给该字段。

4

1 回答 1

3

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

您必须merge()用于更新。

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

于 2012-06-12T11:19:45.340 回答