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将不会轻易关闭,只有当应用退出时才关