我相信我想要删除的实体是托管实体。但是,无论如何,为什么合并它然后删除它会给我以下错误:
已删除的实例传递给合并
有人在 stackoverflow 上说,如果它是托管实体,则应忽略合并。那么为什么这一点没有被忽视呢?
我希望删除它的方式是这样的:
TrialUser mergedEntity = em.merge(tu);
em.remove(mergedEntity);
但是这个错误,但如果我去掉第一行,它似乎工作正常。但我想要另一种方式,因为这与代码的其余部分一致。
EDIT:
@PersistenceContext(unitName = "UnitName")
protected EntityManager entityManager;
@Table(name="TRIAL_USER")
@Id
private BigDecimal id;
@ManyToOne(cascade= {CascadeType.ALL }, fetch=FetchType.EAGER)
@JoinColumn(name="TRIAL_USER_CLASS_ID3")
private TrialUserElement trialUserElement3;
@ManyToOne(cascade= {CascadeType.ALL }, fetch=FetchType.EAGER)
@JoinColumn(name="TRIAL_USER_CLASS_ID1")
private TrialUserElement trialUserElement1;
@ManyToOne(cascade= {CascadeType.ALL }, fetch=FetchType.EAGER)
@JoinColumn(name="TRIAL_USER_CLASS_ID2")
private TrialUserElement trialUserElement2;
当您在事务中运行某些代码、在方法末尾提交时,可能会出现此错误。
当在带有注释的方法或类中使用 spring 时
@Transactional
发生这种情况是因为您首先删除了对象(没有提交),然后尝试更新它。
此代码将生成异常:
@Transactional
myethod(){
dao.delete(myObject);
myObject.setProperty("some value");
dao.save();
}
为了避免错误,您不应删除然后保存在同一事务中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)