。
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);
.........
上级:在执行 entityManager.persist(st) 之前,st.triggerId 值为空,但在 - 之后 - 将先前添加的记录的 id 分配给此字段。
EntityManager.persist()
总是尝试创建新的托管对象。如果在已托管的实体上调用它,则会引发EntityExistsException
。
您必须使用merge()
进行更新。
有关这两种方法,请参阅 javadoc