java JPA批量更新不适用于本机SQL查询

x8diyxa7  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(173)

我在应用程序中使用jpa/hib,并启用了jdbc批处理:
spring.jpa.属性.休眠.jdbc.批处理大小=100
但是,代码中的某些部分仍然使用原生SQL来更新数据库,我注意到批处理更新/插入不适用于这些原生查询

EntityManager em;
em.flushMode(FlushModeType.Commit);
em.beginTransaction();
for (i ....){
//some business logic
  em.createNativeQuery("update some db row"); //Batch:False (not updated in batch)
}
em.commit();

基本上,update方法是从多个地方调用的,其思想是所有记录应该在事务结束时成批地持久化。
我认为这是因为使用原生查询时,我们绕过了第一级捕获,直接写入数据库,但是,有没有什么方法可以利用原生查询的jpa批处理?

wljmcqd8

wljmcqd81#

如果您的更新正在工作,但不是批处理,那么您可能应该在将属性spring.jpa.properties. hib. order_updates设置为true之后尝试。这将确保Hibernate执行所有相同的更新语句,这些语句的区别仅在于提供的绑定参数值不同。如果没有此属性,当您在其他地方执行不同的DB更新时,JDBC驱动程序将关闭并执行批处理。通过对语句进行排序,您可以使JDBC驱动程序尽可能有效地对更新进行分组。
如果更新调用一开始就不起作用,那么请查看这里提供的解决方案:https://thorben-janssen.com/use-native-queries-perform-bulk-updates/

相关问题