首页 > 解决方案 > entitymanager.merge() 会在克隆的实体对象上工作吗

问题描述

这是一个基本问题,但我找不到太多关于此的信息。

用例如下:我使用 CriteriaQuery 进行搜索以查找 x 记录。我在此方法中发起实际搜索的最后一次调用如下:

getEntityManager().createQuery(query).setMaxResults(MAX_ROWS).getResultList())

所以这意味着我要返回的记录附加到 entityManager。

想象一下,我将深度克隆这些实体,更改这些克隆实体中的一些值并尝试调用 entityManager.merge(clonedEntity)。这行得通吗?'merge' 方法是否检查实体中的 'equals' 方法以在数据库中找到类似的对象并更新这些对象,否则这将不起作用,您需要更改附加到 entitymanager 的实体才能更新这些记录在数据库中?

在此先感谢您的帮助

标签: javajpa

解决方案


您可以更新实体管理器控制的对象,然后您不需要合并。克隆的实体是分离的,因此您需要将其持久化(如果它没有 id),它将代表一个新对象,因此是数据库中的一个新条目。

如果它确实有一个 id,你可以合并它。这取决于您是否使用生成的 id 以及克隆是否也复制 id。


推荐阅读