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”作为事务管理器.