Hibernate的事务( Transaction对象 )通过Session的beginTransaction( )方法显式打开,Hibernate自身并不提供事务控制行为(没有添加任何附加锁定行为),Hibernate底层直接使用JDBC连接、JTA资源或其他资源的事务。
Hibernate只是对底层事务进行了抽象,让应用程序可以直接面向Hibernate事务编程,从而将应用程序和JDBC连接、JTA资源或其他事务资源隔离开了。从编程角度来看,Hibernate的事务由Session对象开启;从底层实现来看,Hibernate的事务由 TransactionFactory 的实例来产生。
TransactionFactory是一个事务工厂的接口,Hibernate为不同的事务环境提供了不同的实现类。如CMTTransactionFactory是针对容器管理事务环境的实现类、JDBCTransactionFactory是针对JDBC局部事务环境的实现类、JTATransactionFactory是针对JTA全局事务环境的实现类。
应用程序编程无须手动操作TransactionFactory产生事务,这是因为SessionFactory底层已经封装了TransactionFactory。SessionFactory对象的创建代价很高,它是线程安全的对象,被设计成可以被所有线程所共享。通常SessionFactory会在应用程序启动时创建,一旦创建了SessionFactory将不会轻易关闭,只有当应用退出时才关闭SessionFactory。
Session对象是轻量级的

本文介绍了Hibernate中的Session和事务管理,包括SessionFactory、TransactionFactory及其在不同事务环境的实现。强调了Session的轻量级特性,建议每个请求对应一个Session,避免长事务导致的并发问题。并提出了应对应用程序长事务的三种模式:自动版本化、托管对象和长生命周期Session。最后,讨论了Session缓存管理、懒加载问题以及保持Session打开状态的策略。
最低0.47元/天 解锁文章
1365

被折叠的 条评论
为什么被折叠?



