首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在hibernate中启用批量插入?

问如何在hibernate中启用批量插入?
EN

Stack Overflow用户
提问于 2012-08-18 02:35:35
回答 2查看 30.3K关注 0票数 14

使用hibernate,当我尝试使用以下命令启用批插入时

代码语言:javascript
复制
  <property name="jdbc.batch_size">50</property>

我得到以下输出:

代码语言:javascript
复制
 [...] cfg.SettingsFactory INFO  - JDBC batch updates for versioned data: disabled
 [...] cfg.SettingsFactory INFO  - Order SQL inserts for batching: disabled

然后是这个:

代码语言:javascript
复制
 [...] jdbc.AbstractBatcher DEBUG - Executing batch size: 1

基本上不会超过batch size: 1。

我是不是错过了一个场景?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-18 02:35:35

事实证明,在这种情况下缺少的是:

代码语言:javascript
复制
<property name="order_inserts">true</property>

参考:https://forum.hibernate.org/viewtopic.php?p=2374413,https://stackoverflow.com/a/5240930/32453或可能的hibernate.order_inserts。

现在我明白了

代码语言:javascript
复制
 [...] cfg.SettingsFactory INFO  - Order SQL inserts for batching: enabled
 ...
 [...] Executing batch size: 2

更频繁(任何大于1的值基本上表示它成功地执行了批量插入)。

hibernate.jdbc.batch_versioned_data可能也很有用。

jdbc:mysql://localhost:3306/batch?rewriteBatchedStatements=true类型的连接字符串也可能以某种方式相关。

https://forum.hibernate.org/viewtopic.php?p=2374413,另请参阅Hibernate batch size confusion

票数 6
EN

Stack Overflow用户

发布于 2015-03-19 21:25:18

要为INSERT和UPDATE语句启用批处理,您需要设置以下所有Hibernate属性:

代码语言:javascript
复制
spring.jpa.properties.hibernate.jdbc.batch_size=30
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true

如果可以使用SEQUENCE,那么就不应该使用IDENTITY实体标识符生成器,因为它禁用了批处理获取。

如果您不能使用SEQUENCE (例如MySQL),那么尝试使用单独的机制来启用批量插入(例如JDBC),而不是使用TABLE生成器,因为它不具有伸缩性并且具有高性能损失。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12011343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档