【问题标题】:Merge instead of persist prevents the "detached entity passed to persist" error?合并而不是持久化防止“分离实体传递给持久化”错误?
【发布时间】:2012-05-19 05:31:04
【问题描述】:

我知道有很多关于这个著名的分离实体传递给持久错误的讨论。我遇到了那个错误。我well linked我的实体,但这不是问题:我将一个实体链接到一个已经存在的实体。我尝试了merge() 而不是persist(),它很好地执行了交易。我查询了merge() 方法,我了解到herethere 的要点:它复制了传递对象的状态。对。

我的问题是,而不是

em.persist(e); e.anything();

使用是不是一个坏主意

e = em.merge(e); e.anything();

?

如果我很好理解,merge() 返回状态合并到的托管实例,这应该意味着用返回的实体覆盖给定实体可以访问持久实体,不会是吗?

我在任何地方都没有看到那个“解决方案”,所以我在问。如果是重复的问题,那我就过错:)

【问题讨论】:

    标签: java merge persistence


    【解决方案1】:

    使用e = em.merge(e); e.anything();是个坏主意

    这是否是一个坏主意取决于您的应用程序以及您在合并之前所做的事情以及您在 anything() 中所做的事情。

    merge 将在某些情况下修复“分离实体”错误。在其他情况下,它会在破坏您的应用程序的同时满足实体管理器的要求。

    要针对您的具体案例回答问题,您必须问自己:e 来自哪里?它包含什么?它与其他实体有关系吗?如果是这样,这些关系是双向的吗?等等……

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2017-04-01
      • 2018-09-22
      • 2017-10-21
      相关资源
      最近更新 更多