2

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

我的问题是,而不是

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

使用它是不是一个坏主意

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

?

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

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

4

1 回答 1

1

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

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

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

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

于 2012-05-10T17:56:09.700 回答