entityManager.merge(object)仅保留列表中的最后一条记录

时间:2019-02-09 12:16:25

标签: jpa java-8 spring-data-jpa entitymanager

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

我使用Spring数据JPA entityManager.merge()方法,因为我有用于实体的自定义sequenceGenerator。

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

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

1 个答案:

答案 0 :(得分:0)

Hibernate首先生成SELECT语句以获取基础数据库记录的最新状态,然后将分离的实体状态复制到新获取的管理实体上。这样,脏检查机制可以检测任何状态更改并将其传播到数据库。

在使用IDENTITYSEQUENCE生成器策略时,实际上可以使用merge来保留实体,对于分配的生成器来说,效率会较低。

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

@Version
private Long version;