首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring hibernate jdbc批处理大小

问Spring hibernate jdbc批处理大小
EN

Stack Overflow用户
提问于 2011-03-14 14:29:13
回答 1查看 6.4K关注 0票数 3

我有几个场景,我认为从hibernate文档来看有些不清楚。

数据类:

代码语言:javascript
复制
class HibernateDao {
      // ...

      @Transactional
      public void store(List<Object> batch) {
          for(Object o : batch) {
             hibernate.store(o);
          }
      }
}

场景1

代码语言:javascript
复制
hibernate.jdbc.batch_size = 1

Q1:使用10项集合调用store(..)时会发生什么?会有10x1的交易还是只有一个?

场景2

代码语言:javascript
复制
hibernate.jdbc.batch_size = 10

Q2:使用1项集合调用store(..)时会发生什么?它是否会立即写入备份存储,而不管batch_size属性如何?

在hibernate文档中:

如果使用标识符生成器,Hibernate将禁用JDBC级别的插入批处理。

Q3:什么被归类为identify identifier generator,使用注释@Id和@GeneratedValue(strategy = GenerationType.AUTO)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-14 14:53:54

Q1:调用存储(..)时会发生什么?收集10件物品?会有10x1的交易还是只有一个?

这是特定于Spring事务的,但就Hibernate而言,如果您使用的是一个会话和一个“事务”,它将等待“刷新”或“提交”来实际执行这些操作。所以,一笔交易。

Q2:调用存储(..)时会发生什么?收集了1件物品?它是否会立即写入备份存储,而不管batch_size属性如何?

不是马上。与前面的响应相同的是:除非您明确要求进行“刷新”,否则Hibernate将在提交阶段执行此操作。

Q3:使用注释@Id和@GeneratedValue(strategy = GenerationType.AUTO),什么被归类为标识标识符生成器?

任何Hibernate无法预测的ID。例如,标识(如序列,但对于T数据库)、自动增量、序列、.原因很简单: Hibernate不知道每个批处理实体生成的ID是什么,所以插入后的实体状态与之前的状态不同。Hibernate通过调用用于"getGeneratedKeys“的JDBC方法来处理这一点,这允许它将来自数据库的数据与其会话中的数据同步,但无法对批处理进行同步。

如果Hibernate知道实体的ID是什么(即:分配,hilo,uuid,.)它可以安全地执行批处理执行。

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

https://stackoverflow.com/questions/5299955

复制
相关文章

相似问题

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