🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 3.8.1\. 事务策略配置 在你的架构中,Hibernate的`Session` API是独立于任何事务分界系统的. 如果你让Hibernate通过连接池直接使用JDBC, 你需要调用JDBC API来打开和关闭你的事务. 如果你运行在J2EE应用程序服务器中, 你也许想用Bean管理的事务并在需要的时候调用JTA API和`UserTransaction`. 为了让你的代码在两种(或其他)环境中可以移植,我们建议使用可选的Hibernate `Transaction` API, 它包装并隐藏了底层系统. 你必须通过设置Hibernate配置属性`hibernate.transaction.factory_class`来指定 一个`Transaction`实例的工厂类. 有三个标准(内建)的选择: `org.hibernate.transaction.JDBCTransactionFactory` 委托给数据库(JDBC)事务(默认) `org.hibernate.transaction.JTATransactionFactory` 如果在上下文环境中存在运行着的事务(如, EJB会话Bean的方法), 则委托给容器管 理的事务, 否则,将启动一个新的事务,并使用Bean管理的事务. `org.hibernate.transaction.CMTTransactionFactory` 委托给容器管理的JTA事务 你也可以定义属于你自己的事务策略 (如, 针对CORBA的事务服务) Hibernate的一些特性 (比如二级缓存, Contextual Sessions with JTA等等)需要访问在托管环境中的JTA `TransactionManager`. 由于J2EE没有标准化一个单一的机制,Hibernate在应用程序服务器中,你必须指定Hibernate如何获得`TransactionManager`的引用: **表 3.10\. JTA TransactionManagers** | Transaction工厂类 | 应用程序服务器 | | --- | --- | | `org.hibernate.transaction.JBossTransactionManagerLookup` | JBoss | | `org.hibernate.transaction.WeblogicTransactionManagerLookup` | Weblogic | | `org.hibernate.transaction.WebSphereTransactionManagerLookup` | WebSphere | | `org.hibernate.transaction.WebSphereExtendedJTATransactionLookup` | WebSphere 6 | | `org.hibernate.transaction.OrionTransactionManagerLookup` | Orion | | `org.hibernate.transaction.ResinTransactionManagerLookup` | Resin | | `org.hibernate.transaction.JOTMTransactionManagerLookup` | JOTM | | `org.hibernate.transaction.JOnASTransactionManagerLookup` | JOnAS | | `org.hibernate.transaction.JRun4TransactionManagerLookup` | JRun4 | | `org.hibernate.transaction.BESTransactionManagerLookup` | Borland ES |