首页 > 解决方案 > entityManager.merge(object) 仅保留列表中的最后一条记录

问题描述

我有两条记录,ArrayList<Object>但是当我尝试将这些记录插入数据库时​​,只有最后一条记录被保存到数据库中。

我正在使用 Spring data JPAentityManager.merge()方法,因为我有自定义 sequenceGenerator 用于实体。

summaryList.stream().forEach{(summary -> entityManager.merge(summary)};

在调试时,我在 summaryList 中得到了两条记录,但是当我检查我的数据库表时,只插入了一条记录。

标签: jpajava-8spring-data-jpaentitymanager

解决方案


Hibernate 首先生成一个SELECT语句来获取底层数据库记录的最新状态,然后,它将分离的实体状态复制到新获取的托管实体上。这样,脏检查机制可以检测任何状态变化并将其传播到数据库。

虽然 forIDENTITYSEQUENCE生成器策略,您实际上可以使用合并来持久化实体,对于分配的生成器,这会降低效率。

您实际上可以通过向您的实体添加版本属性来解决此问题。

@Version
private Long version;

推荐阅读