Jpa批量新增和更新
https://www.cnblogs.com/blog5277/p/10661096.html
关键点:
- 在application.properties中设置spring.jpa.properties.hibernate.jdbc.batch_size
- 在application.properties中设置JDBC URL rewriteBatchedStatements=true(MySQL的优化,语句被重写为单个String缓冲区并在单个请求中发送)
- 在application.properties中设置JDBC URL cachePrepStmts=true(启用缓存和如果你决定设置prepStmtCacheSize,prepStmtCacheSqlLimit等等也是有用的;没有这个设置,缓存被禁用)
- 在application.properties中设置JDBC URL useServerPrepStmts=true(这样你切换到服务器端预处理语句(可能会带来显着的性能提升))
- 如果使用cascade all / merge的父子关系(例如,一对多,多对多),则考虑spring.jpa.properties.hibernate.order_updates=true通过订购更新来设置优化批处理
- 在Hibernate 5之前,我们需要在application.properties中设置一个设置,用于在更新和删除操作期间启用版本化实体的批处理(包含@Version隐式乐观锁定的实体)。此设置为:spring.jpa.properties.hibernate.jdbc.batch_versioned_data=true。从Hibernate 5开始,默认情况下应该设置true。
spring.jpa.properties.hibernate.jdbc.batch_size需要结合spring.jpa.properties.hibernate.order_updates=true,spring.jpa.properties.hibernate.order_inserts=true 来保证更新和插入会重新组合优化批量操作sql(重组sql)