JPA Spring Boot - Hibernate插入缓慢

3

我有三个实体列表,想要保存到数据库中。

总共大约有1000个实体需要持久化。

entityRepo.save(EntityList);

然而,这需要4-5分钟才能完成。-并且我注意到在插入之前它正在执行一些select语句,我认为这是hibernate的脏检查以查看是否需要更新或插入。

有没有办法禁用它并提高hibernate插入速度?

一直在研究刷新,但不确定如何在一次保存整个列表时进行刷新?


2
不要使用列表进行保存,而是自己迭代。开启批量插入,当循环每个 x(例如50)对象时,刷新并清除entity manager。每次持久化一个对象时,Hibernate都会在第一级缓存中对所有实体进行脏检查,如果只有1个实体,则不会出现明显的问题,但是当有1000个实体时,它会非常快地进行检查。将其限制为50并在其中进行刷新/清除可以帮助解决这个问题。 - M. Deinum
2个回答

1

0

当你说脏检查会导致从数据库中读取时,你是正确的。如果你使用标准的Hibernate Session 来持久化你的实体,它们将像正常情况下一样由Hibernate管理。

如果你希望避免这种情况,最简单的方法可能是打开一个StatelessSession并使用org.hibernate.StatelessSession.insert。这不使用一级缓存,因此不需要对实体进行脏检查。

你可以通过调用SessionFactory#withStatelessOptions来获取StatelessSessionBuilder的实例来实现这一点。然后你可以调用org.hibernate.StatelessSessionBuilder.openStatelessSession


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接