java - entitymanager.merge() 会在克隆的实体对象上工作吗
问题描述
这是一个基本问题,但我找不到太多关于此的信息。
用例如下:我使用 CriteriaQuery 进行搜索以查找 x 记录。我在此方法中发起实际搜索的最后一次调用如下:
getEntityManager().createQuery(query).setMaxResults(MAX_ROWS).getResultList())
所以这意味着我要返回的记录附加到 entityManager。
想象一下,我将深度克隆这些实体,更改这些克隆实体中的一些值并尝试调用 entityManager.merge(clonedEntity)。这行得通吗?'merge' 方法是否检查实体中的 'equals' 方法以在数据库中找到类似的对象并更新这些对象,否则这将不起作用,您需要更改附加到 entitymanager 的实体才能更新这些记录在数据库中?
在此先感谢您的帮助
解决方案
您可以更新实体管理器控制的对象,然后您不需要合并。克隆的实体是分离的,因此您需要将其持久化(如果它没有 id),它将代表一个新对象,因此是数据库中的一个新条目。
如果它确实有一个 id,你可以合并它。这取决于您是否使用生成的 id 以及克隆是否也复制 id。
推荐阅读
- c# - 我可以在 .NET 控制器上返回不同的剃须刀视图吗?
- performance - 多个单线程二进制文件比一个并行 OpenMP 进程更快?
- python - 使用“烧瓶运行”不会启用调试器....为什么?
- ionic-framework - 如何在提供程序中使用 NavController - Ionic
- javascript - 散景回调范围
- python - 使用字符串在列表中查找其整数值
- java - nextLine 方法给了我一个不正确的实现
- sql - 如何从不同的查询结果SQL创建表
- makefile - 将所有目标文件放在同一个目录中,用于生成文件中的分布式源
- swift - 如何通过 UISearchBar 文本过滤掉内容?