jpa - entityManager.merge(object) 仅保留列表中的最后一条记录
问题描述
我有两条记录,ArrayList<Object>
但是当我尝试将这些记录插入数据库时,只有最后一条记录被保存到数据库中。
我正在使用 Spring data JPAentityManager.merge()
方法,因为我有自定义 sequenceGenerator 用于实体。
summaryList.stream().forEach{(summary -> entityManager.merge(summary)};
在调试时,我在 summaryList 中得到了两条记录,但是当我检查我的数据库表时,只插入了一条记录。
解决方案
Hibernate 首先生成一个SELECT
语句来获取底层数据库记录的最新状态,然后,它将分离的实体状态复制到新获取的托管实体上。这样,脏检查机制可以检测任何状态变化并将其传播到数据库。
虽然 forIDENTITY
和SEQUENCE
生成器策略,您实际上可以使用合并来持久化实体,对于分配的生成器,这会降低效率。
您实际上可以通过向您的实体添加版本属性来解决此问题。
@Version
private Long version;
推荐阅读
- r - 如何知道变量对 R lme4 模型中的模型是否具有统计意义?
- java - 如何从字符串中提取名字、中间名和姓氏。以及在没有输入中间名时如何识别
- javascript - 了解如何更改 SVG
- sql - 选择具有一个 unique_id 和第二个 unique_id 不同 ORACLE 的重复行
- sql-server - 如何根据字段条件对结果进行 SQL PIVOT 格式化?
- swift - reverseValueTransformed 改变有界属性后如何调用 valueTransformed?(迅速)
- json - 尝试使用 JSON 加载时出错。相信字符串格式正确
- git - 如何为拉取请求恢复已删除的分叉分支
- reactjs - 此代码是表示组件/容器组件结构的示例吗?
- php - 带有python脚本“退出代码:127(找不到命令)”的Laravel任务计划