现在的位置: 首页 > 综合 > 正文

org.springframework.orm.hibernate3.HibernateTransactionManage

2019年05月12日 ⁄ 综合 ⁄ 共 2024字 ⁄ 字号 评论关闭

转载自:这里

org.springframework.orm.hibernate3
类 HibernateTransactionManager

java.lang.Object
  继承者 org.springframework.transaction.support.AbstractPlatformTransactionManager
      继承者 org.springframework.orm.hibernate3.HibernateTransactionManager
所有已实现的接口:
java.io.Serializable,
BeanFactoryAware
,
InitializingBean
,
PlatformTransactionManager
,
ResourceTransactionManager

public class HibernateTransactionManager
extends AbstractPlatformTransactionManager
implements ResourceTransactionManager, BeanFactoryAware, InitializingBean

PlatformTransactionManager 实施单一Hibernate的SessionFactory
。绑定一个指定的工厂的Hibernate Session从到线程,可能。允许一个线程每绑定会话工厂SessionFactoryUtils

HibernateTemplate
是线程绑定会话了解和参与这种交易自动。使用上述两种或通过将这些 SessionFactory.getCurrentSession()是必需的Hibernate访问代码,这需要支持事务处理机制。

支持自定义隔离级别,并且将它作为应用Hibernate事务超时超时。

此项交易的应用程序管理器使用一个单一的交易数据访问Hibernate的SessionFactory恰当,但它也支持直接数据源在一个交易( 即纯JDBC代码相同的数据源工作)的访问。这允许它访问Hibernate和服务的使用(没有被察觉的Hibernate)纯JDBC混合服务! 应用程序代码需要坚持到相同的简单连接查找与模式作为

DataSourceTransactionManager
(即
DataSourceUtils.getConnection(javax.sql.DataSource)
或经历一个
TransactionAwareDataSourceProxy
)。

注:为了能够为普通的JDBC代码登记一个数据源的连接,这种情况需要(了解数据源setDataSource(javax.sql.DataSource)
)。给定的数据源,显然应该匹配给定的SessionFactory使用的方法 。为了实现这一目标,同时配置相同的JNDI数据源,或者最好使用SessionFactory的创建

LocalSessionFactoryBean
和本地数据源(将由本次交易经理自动检测)。

JTA的(通常是通过JtaTransactionManager )可以在同一事务中访问多个事务性资源的需要。 Hibernate使用的数据源是JTA需要在这种情况下(见容器设置)启用。通常情况下,对Hibernate的JTA设置有点容器特定由于到JTA
TransactionManager的查找,正确的SessionFactory级别的事务处理读写缓存需要。

幸运的是,与春天更简单的方法:
SessionFactoryUtils
(因此HibernateTemplate )寄存器的同步与Spring

TransactionSynchronizationManager
(如使用JtaTransactionManager
),为了正确后完成回调 。因此,只要Spring的JtaTransactionManager长途驾驶的JTA事务,Hibernate不要求任何适当的JTA参加的特别配置 。请注意,有特别的限制的JTA子系统与EJB CMT和限制性:参见

JtaTransactionManager
的详情的javadoc。

基于JDBC 3.0中,此嵌套事务管理器支持通过JDBC 3.0保存点交易。该AbstractPlatformTransactionManager.setNestedTransactionAllowed(boolean)
“nestedTransactionAllowed ”}标志默认为“假”,但是,正如嵌套事务只会适用于JDBC连接,而不是Hibernate的Session和缓存的对象 。您可以手动设置“标志,以”真,如果你想使用Hibernate事务嵌套事务的JDBC访问代码中的参与(前提是你的JDBC驱动程序支持保存点)。
注意Hibernate本身不支持嵌套事务!因此,不要指望Hibernate访问代码语义参加一个嵌套事务。

需要休眠3.1或更高版本,如春天的2.5。

抱歉!评论已关闭.