`
michales003
  • 浏览: 403600 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Hibernate 的 batch_size 与事务

    博客分类:
  • J2EE
阅读更多

batch_size 即同时提交数据的数量,原本与事务并没有什么关系,但如果涉及到同一张表数据的同一种操作,可能就会发生微妙的关系了。

场景如下:
场景一:使用 spring 控制事务,将方法事务配置为 not_supported,向同一张表中插入两条数据,保证第一条数据正常插入,而第二条数据受约束(如唯一约束)插入失败。

预测结果:第一条数据成功,第二条失败。
实际结果:两条数据均失败。
原因:hibernate 将两条插入放到了同一个 batch 中,提交同时失败了。

场景二:同样使用 spring 控制事务,将方法事务配置为 not_supported,向第一张表中插入一条合法数据,成功,向第二张表插入数据,受约束(如唯一约束)插入失败。

预测结果:第一条数据成功,第二条失败。
实际结果:第一条数据成功,第二条失败。
原因:hibernate 分别插入数据并提交,在无事务的情况下,第一条成功,第二条失败。

那么如何让场景一得到预测结果呢,一个简单的解决方法,将 hibernate.jdbc.batch_size 设置为 1,即可。

所以,即使控制了事务,也未必能够得到期望的结果,还需要考虑某些特殊的场景带来的影响。

分享到:
评论

相关推荐

    hibernate-batch-size-test:Hibernate hibernate.jdbc.batch_size 测试

    `hibernate.jdbc.batch_size`是Hibernate配置中的一个重要参数,用于控制批处理操作的大小。本文将深入探讨这个参数的意义、作用以及如何在实际应用中进行测试。 批量插入是提高数据库性能的有效手段,特别是在大量...

    hibernate.cfg.xml中配置信息详解

    Hibernate.jdbc.batch_size 属性用于控制 Hibernate 的批量更新。如果设置为非零值,Hibernate 将使用 JDBC2 的批量更新。 hibernate.jdbc.batch_versioned_data Hibernate.jdbc.batch_versioned_data 属性用于...

    Hibernate 参数配置详解

    例如,通过设置合适的 `hibernate.max_fetch_depth` 和 `hibernate.default_batch_fetch_size` 可以显著提升应用性能;而启用 `hibernate.generate_statistics` 则有助于我们更好地监控和分析应用性能瓶颈。此外,...

    Hibernate参数设置一览表

    10. **hibernate.jdbc.batch_size** 设置批量插入或更新的大小。增加这个值可以提高性能,但过大的批量可能会消耗更多内存。 11. **hibernate.connection.pool_size** 数据库连接池的大小,用于管理数据库连接,...

    hibernate配置参数大全

    8. **`hibernate.default_batch_fetch_size`**:定义默认批量获取的大小。 - 示例: ```properties hibernate.default_batch_fetch_size=16 ``` 9. **`hibernate.default_entity_mode`**:定义默认的实体映射...

    hibernate配置参数详解

    7. **`hibernate.default_batch_fetch_size`**: 默认的批量加载大小。 ```properties hibernate.default_batch_fetch_size=10 ``` 这个配置项设置了Hibernate在执行批量加载操作时的默认批次大小。 8. **`...

    Hibernate_API_zh-cn高手汇总

    2. batch-size:批处理大小,一次性加载多个实体,提高效率。 3. cache:利用缓存机制减少数据库访问。 4. 第三方连接池:如C3P0、HikariCP等,提高数据库连接的复用率。 本汇总资料全面解析了Hibernate API的使用...

    hibernate 中文文档 and _annotation.chm

    - 使用批处理:通过设置hibernate.jdbc.batch_size来批量处理插入、更新和删除操作。 - 开启二级缓存:提高数据读取速度,但需注意缓存一致性问题。 - 使用懒加载(Lazy Loading):按需加载关联对象,减少内存...

    hibernate操纵实体对象

    这可以通过设置`hibernate.jdbc.batch_size`属性来实现。 6. **事务管理(Transaction Management)**:在Hibernate中,通常使用`Session`的`beginTransaction()`, `commit()`和`rollback()`方法来管理事务。事务...

    Hibernate可选配置大全

    hibernate.jdbc.batch_size - **功能**:控制批量更新的规模。 - **取值**:推荐范围`5`至`30`。 ##### 3. hibernate.jdbc.batch_versioned_data - **功能**:启用批量更新后的行数反馈。 - **取值**:`true`或`...

    Hibernate 参数设置一览表(强烈推荐)

    Hibernate 是一个广泛使用的Java持久化框架,它简化了数据库与Java对象之间的交互。在使用Hibernate进行应用程序开发时,正确配置Hibernate参数是至关重要的,因为这些参数直接影响到性能、内存使用和事务处理等关键...

    Hibernate核心配置文件对照表

    - `hibernate.jdbc.batch_size`: 批量处理的SQL语句数量,可优化性能。 这些配置选项只是`hibernate.properties`中的一部分,实际使用时可能还需要根据项目需求配置更多的参数。理解并正确配置这些参数对于优化...

    Hibernate_demo

    4. 对于大数据量的操作,考虑使用批处理,如Session的flushMode和 batchSize属性。 总结,"Hibernate_demo"是一个生动的实例,展示了如何在实际项目中运用Hibernate5。通过分析这个项目,我们可以更好地理解和掌握...

    Hibernate笔记

    - **Batch Size**: 与`Fetch Size`不同,`batch_size`属性主要针对批量操作的优化。 - **配置示例**: ```xml <property name="hibernate.jdbc.batch_size">30 ``` #### 六、查询示例 - **HQL查询示例**: - ...

    hibernate_hibernate_

    3. 批量操作:通过批处理SQL,例如Session的batch_size属性,可以提高插入、更新和删除操作的效率。 4.延迟加载(Lazy Loading):对于关联关系,如果不立即使用,可以设置为懒加载,减少不必要的数据库访问。 ...

    Hibernate配置文件

    - `hibernate.jdbc.batch_size`: 批量处理的SQL语句数量,提高性能。 - `hibernate.max_fetch_depth`: 最大级联加载深度,防止无限递归问题。 - `hibernate.generate_statistics`: 是否开启统计信息收集,有助于...

    hibernate[1].cfg.xml中配置信息详解

    `hibernate.jdbc.batch_size` **用途**:设置批量更新的大小。此配置项可以用来优化大量数据的更新操作。 **取值**:建议取5到30之间的值。 ##### 3. `hibernate.jdbc.batch_versioned_data` **用途**:启用或...

    Hibernate4 环境搭建

    <property name="hibernate.jdbc.batch_size">30 <!-- 二级缓存配置 --> <property name="hibernate.cache.use_second_level_cache">true <property name="hibernate.cache.use_query_cache">true <!-- ...

    Hibernate程序性能优化的考虑要点

    Hibernate作为一款优秀的对象关系映射(ORM)工具,它能够简化Java应用程序与数据库之间的交互,但不当的配置和使用可能导致性能瓶颈。本文将深入探讨Hibernate程序性能优化的关键点,帮助开发者更好地理解和掌握...

Global site tag (gtag.js) - Google Analytics