- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
hibernate的基于JDBC和JTA的事务管理机制的分析
hibernate的基于JDBC和JTA的事务管理机制的分析??
2009-08-19 14:52:46|??分类: 框架、源码 |??标签: |字号大中小?订阅
Hibernate 是JDBC 的轻量级封装,本身并不具备事务管理能力。在事务管理层, Hibernate将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能。 Hibernate的默认事务处理机制基于JDBC Transaction。我们也可以通过配置文 件设定采用JTA作为事务管理实现:
Java代码
hibernate-configuration ?r
session-factory ?a
? ?ss
property?ame=hibernate.transaction.factory_class ?ct
net.sf.hibernate.transaction.JTATransactionFactory ?
!--net.sf.hibernate.transaction.JDBCTransactionFactory-- ?我
/property ?b
? ?ro
/session-factory ?.
/hibernate-configuration?c
hibernate-configuration
session-factory
?
property name=hibernate.transaction.factory_class
net.sf.hibernate.transaction.JTATransactionFactory
!--net.sf.hibernate.transaction.JDBCTransactionFactory--
/property
……
/session-factory
/hibernate-configuration
基于JDBC的事务管理将事务管理委托给JDBC 进行处理无疑是最简单的实现方式,Hibernate 对于JDBC事务的封装也极为简单。 我们来看下面这段代码:
Java代码
session?=?sessionFactory.openSession(); ??
Transaction?tx?=?session.beginTransaction(); ??
…… ??
mit();??
session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
……
mit();
从JDBC层面而言,上面的代码实际上对应着:
Java代码
Connection?dbconn?=?getConnection(); ??
dbconn.setAutoCommit(false); ??
…… ??
mit();??
Connection dbconn = getConnection();
dbconn.setAutoCommit(false);
……
mit();
就是这么简单,Hibernate并没有做更多的事情(实际上也没法做更多的事情),只是将这样的JDBC代码进行了封装而已。 这里要注意的是,在sessionFactory.openSession()中,hibernate会初始化数据库连接,与此同时,将其AutoCommit 设为关闭状态(false)。而其后,在Session.beginTransaction 方法中,Hibernate 会再次确认Connection 的AutoCommit 属性被设为关闭状态( 为了防止用户代码对session 的Connection.AutoCommit属性进行修改)。 这也就是说,我们一开始从SessionFactory获得的session,其自动提交属性就已经被关闭(AutoCommit=false),下面的代码将不会对数据库产生任何效果:
Java代码
session?=?sessionFactory.openSession(); ??
session.save(user); ??
session.close();??
session = sessionFactory.openSession();
session.save(user);
session.close();
这实际上相当于 JDBC Connection的AutoCommit属性被设为false,执行了若干JDBC操作之后,没有调用commit操作即将Connection关闭。如果要使代码真正作用到数据库,我们必须显式的调用Transaction指令:
Java代码
session?=?sessionFactory.openSession(); ?a
Tra
您可能关注的文档
最近下载
- 2021书记员考试《公文写作》100题(含解答).pdf VIP
- 中国古代体育的发展和演变.ppt VIP
- 2024年最新征信报告模板样板个人版pdf模版信用报告详细版.pdf
- 广西北海海事法院招聘聘用制书记员考试试题及答案.docx VIP
- 体育史 全套课件.PPT VIP
- 体育史 课件完整版.pptx VIP
- BS EN 12390-4-2019 Testing hardened concrete Part 4:Compressive strength – Specification for testing machines 硬化混凝土试验第4部分: 抗压强度试验机规范.pdf
- BS EN 12350-5-2019 新鲜混凝土试验.第5部分:流动表试验.pdf VIP
- BS EN 12350-4-2019 新鲜混凝土试验.第4部分:密实度.pdf VIP
- BS EN 12350-5-2019 Testing fresh concrete Part 5:Flow table test 新拌混凝土试验第5部分: 流动台试验.pdf
原创力文档


文档评论(0)