为什么我在先合并实体时将已删除的实例传递给合并

新手上路,请多包涵

我相信我希望删除的实体是一个托管实体。但是,无论如何,为什么合并它然后删除它给我以下错误:

传递给合并的已删除实例

有人在 stackoverflow 上说,如果合并是托管实体,则应忽略合并。那么为什么这不被忽视呢?

我希望删除它的方式是这样的:

 TrialUser mergedEntity = em.merge(tu);
em.remove(mergedEntity);

但是这个错误,但是如果我去掉第一行它似乎工作正常。但我想要另一种方式,因为这与代码的其余部分一致。

编辑:

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

原文由 Rika 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 250
1 个回答

当您在事务中运行一些代码时,当您在方法的末尾提交时,您可能会遇到此错误。在注释为的方法或类中使用 spring 时

@Transactional

发生这种情况是因为您首先删除了对象(未提交),然后尝试更新它。

此代码将生成异常:

     @Transactional
    myethod(){
      dao.delete(myObject);
      myObject.setProperty("some value");
      dao.save();
    }

为避免错误,您不应在同一事务中删除然后保存。

原文由 Spyna 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题