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 <T extends GenericTrigger> void persistTrigger(SyncTrigger
st, T concreteTrigger){
entityManager.persist(st);
.........
UPD: 在执行entityManager.persist(st)之前,st.triggerId的值为null,但是之后添加的记录的id被分配给该字段。
答案 0 :(得分:3)
EntityManager.persist()
总是尝试创建一个新的托管对象。如果您在已经管理的实体上调用它,它会抛出EntityExistsException
。
您必须使用merge()
进行更新。
请参阅两种方法的javadoc。