Spring如何管理休眠会话生命周期

Spring用于我们团队的Java EE项目,而hibernate用于基础ORM.

transactionManager的设置如下:

<bean id="transactionManager"  class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean> 

sessionFactory的设置如下:

<bean id="sessionFactory"  class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan"
value="com.company.model" />
<property name="hibernateProperties">

<value>
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
hibernate.show_sql=true
hibernate.jdbc.fetch_size=50
</value>
</property>
</bean>

我的问题是考虑了整个设置,我没有看到休眠会话生命周期的任何属性设置.在休眠参考中,引入了上下文会话,并说有CurrentSessionContext的三种实现.

> JTA 2.Thread 3.托管

我怎么知道使用了哪种实现?也许在Spring之前,但我不知道.

最佳答案
Spring使用给定的dataSource创建SessionFactory,并从连接池中获取其数据库连接.我们通过SessionFactory.getCurrentSession()获得一个Hibernate会话.然后开始事务,执行工作,然后执行commit()或rollback(),最后关闭连接(连接对象将返回到池中).当我们停止应用程序或关闭服务器时,Hibernate会话工厂将被破坏/关闭.并且默认情况下,如果使用HibernateTransactionManager,将使用CurrentSessionContext的Thread实现.如果要使用jta实现,则必须使用“ JtaTransactionManager”作为事务管理器.

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...