我知道有很多关于这个著名的分离实体的讨论,传递给持久错误。我遇到了这个错误。我很好地链接了我的实体,但这不是问题所在:我将一个实体链接到一个已经存在的实体。我尝试了merge()
而不是persist()
,这很好地执行了交易。我询问了merge()
方法,我在这里和那里学到了要点:它复制了传递对象的状态。右。
我的问题是,而不是
em.persist(e); e.anything();
使用是个坏主意吗
e = em.merge(e); e.anything();
?
如果我很好地理解,merge()
返回状态合并到的托管实例,这应该意味着用返回的实体覆盖给定实体可以访问持久实体,不是吗?
我无处看到那个"解决方案",所以我在问。如果这是一个重复的问题,那就过错了:)
使用
e = em.merge(e); e.anything();
是个坏主意吗
这是否是一个坏主意取决于您的应用程序以及您在合并之前正在执行的操作以及您在anything()
中正在执行的操作。
在某些情况下,merge
将修复"分离实体"错误。在其他情况下,它将满足实体管理器的要求,同时破坏您的应用程序。
要回答针对您的具体情况的问题,您必须问自己:e
来自哪里?它包含什么?它是否与其他实体有关系?如果是这样,这些关系是双向的吗?等。。。