`

项目中碰到的Hibernate事务处理问题小结

阅读更多

1.事务的隔离级别(请参考:http://epub.itpub.net/3/4.htm)
我们使用的隔离级别是Oracle的默认隔离级别:提交读(read committed),它允许不
可重复读和幻象读。
例子:A开启事务1, B开启事务2;事务1中先执行查询,获得1条数据。
事务2这时候update了这条数据,事务1再次查询获得这条数据,这条数据和之前查询出
的数据可能不同!

2.可能产生错误的做法
很多程序会这样做:先查询,校验数据,处理业务逻辑后,然后update数据
第一次查询和update过程中,如果有别的用户也update了这条数据,可能会造成实际上
的校验无效

3.hibernate的解决方法
hibernate使用版本号(version)解决重复update的问题
hibernate实际这样操作数据:假设表A,版本号初始化值是1
事务1:先查询表A,这时候hibernate会获得这个版本号1
事务2:后查询表A,也获得了版本号1,但是在事务1之前update了表A,这时候
hibernate自动把版本号更新为2
事务1这时候再update表A,会这样做:update A set ... where version=1
此时update不到任何数据,系统会抛出exception.

4.我们该怎么做
a) 完全通过hibernate来处理数据,校验数据,将获得hibernate的版本号服务
b) 数据校验不能在action层中做,因为action不会开启事务
c) 校验数据时必须使用hibernate的load等方法获得数据,而不能使用spring的
jdbctemplate写sql获得数据.
   这样获得数据,会脱离hibernate的版本控制管理,会造成实际上的校验失效
d) 某些特殊的情况(比如通讯程序),不使用hibernate,那么必须自己管理版本号来避
免类似问题

5.read-only事务
在我们系统中,find/query开始的方法设置为read-only事务,只对读有效。
read-only是serializable的子集,保证了同一事务中两次查询会获得一个结果

分享到:
评论

相关推荐

    关于Clob类型在Hibernate中 的应用小结-- 一篇使用心得.zip

    本篇文章将探讨在Hibernate中如何使用Clob类型来处理大文本数据,主要涉及Clob类型的概念、使用场景、在Hibernate中的配置以及一些注意事项。 Clob(Character Large Object)是SQL标准定义的一种数据类型,用于...

    hibernate更新数据方法小结

    在实际开发中,还需要注意更新对象时可能遇到的并发问题。如果两个用户同时更新同一数据,那么可能会导致数据不一致。在某些情况下,使用乐观锁或悲观锁可以解决这个问题。Hibernate同样提供了对此类需求的支持,...

    hibernate的知识总结

    ### 小结 以上总结的知识点涵盖了Hibernate中与数据库的数据类型映射,关系配置的XML和注解方法,以及一些基础的FAQ解答。由于Hibernate框架的广泛性,其功能和配置内容远远不止这些。要全面掌握Hibernate,还需要...

    网上书店的项目PPT展示

    在项目实施过程中,小组成员遇到了技术和非技术问题,例如SSH框架的集成、数据库设计和优化、UI设计和实现等。但是,通过团队协作和努力,最终实现了项目的成功。 项目小结方面,该系统达到了80%的满意度,小组成员...

    SSH项目源码及心得体会

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架。这个"SSH项目源码及心得体会"的资源对于初学者来说尤其宝贵,因为它不仅包含了实际项目的源代码,还记录了开发者在整合和...

    Spring+Struts+Hibernate应用

    小结 (11.13) 对本章内容进行总结回顾,强调 Spring、Struts 和 Hibernate 整合的关键点及注意事项。 ### 结论 通过对《Spring+Struts+Hibernate 应用》的学习,我们可以了解到如何有效地将这三个框架整合起来,...

    SSH练习的小结

    提供的“项目总结.docx”文档可能包含了SSH实战项目的具体实施步骤、遇到的问题及解决方案、性能优化措施、团队协作经验等内容。通过阅读这份文档,你可以学习到项目管理、问题排查、技术选型等方面的知识。 7. **...

    \第十一章 开发Spring+Struts+Hibernate应用.pdf

    小结 - **总结**:本章主要介绍了如何利用Spring、Struts和Hibernate这三个流行的Java框架来开发Web应用,并详细解释了各个步骤的具体实现方法。 - **重点**:Spring与Struts、Hibernate的整合技术是当前企业级...

    Hibernate学习资料(离线查询)

    ### 小结 通过以上介绍,我们可以看到Hibernate的Criteria API提供了非常灵活且强大的查询能力,能够满足复杂的应用场景需求。掌握了这些技巧,开发者就可以更加高效地利用Hibernate来处理数据库操作。 以上便是...

    ssh实践

    在这个"ssh实践"的项目中,"小结.txt"可能是作者对SSH整合过程中的总结,可能包含了关键配置、遇到的问题及解决方案。而"testSpring源码"可能是作者为了测试Spring功能而编写的代码,可能涵盖了Spring的IoC、AOP、...

    ssh三大框架学习心得

    SSH三大框架,即Struts、Spring和Hibernate,是Java企业级开发中广泛应用的开源框架组合。它们各自在不同的层面上提供了强大的功能,帮助开发者构建高效、可维护的Web应用程序。 Struts是MVC(Model-View-...

    SSH开发详解

    小结 (11.13) 通过对本章的学习,读者不仅能够掌握如何使用Spring、Struts与Hibernate进行联合开发的基本方法,还能深入了解这些框架之间如何协同工作以提高开发效率和系统性能。希望这些知识能够为Java学习者在...

    基于springboot的迷你天猫商城设计与实现 .docx

    #### 本章小结 本章节从技术角度出发,详细介绍了迷你天猫商城项目的背景、技术选型、需求分析及业务流程设计等方面的内容。通过这些准备工作,为后续的实际开发奠定了坚实的基础。接下来,我们将深入探讨系统的...

    鲁棒的数据库持久层设计

    #### 九、小结 构建鲁棒的数据库持久层是一项复杂但至关重要的任务。通过对以上各方面的深入讨论,我们可以得出以下结论: - **选择合适的技术栈**:根据项目的具体需求选择最合适的持久层技术。 - **遵循最佳实践...

Global site tag (gtag.js) - Google Analytics