【问题标题】:how spring manage hibernate session lifecycleSpring如何管理休眠会话生命周期
【发布时间】:2012-05-27 15:57:44
【问题描述】:

我们团队的Java EE项目中使用了Spring,底层ORM使用的是hibernate。

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 的三个实现。

  1. JTA 2.Thread 3.Managed

我怎么知道使用了哪个实现。也许是 Spring,但我不知道。

【问题讨论】:

标签: spring hibernate session lifecycle


【解决方案1】:

hibernate.current_session_context_class 配置参数定义应该使用哪个org.hibernate.context.CurrentSessionContext 实现。为了向后兼容,如果未设置此配置参数但配置了org.hibernate.transaction.TransactionManagerLookup,Hibernate 将使用org.hibernate.context.JTASessionContext.,您也可以通过设置属性并使用简写为'jpa'来配置。

所以默认情况下,您使用的是 'jpa' - 您可以通过定义类似的属性来覆盖它。

<prop key="hibernate.current_session_context_class">managed</prop>

阅读本文以获取有关上下文会话的完整信息。

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/architecture.html#architecture-current-session

【讨论】:

    【解决方案2】:

    SessionFactory 由 Spring 使用给定的数据源创建,并从连接池中获取其 DB 连接。我们通过 SessionFactory.getCurrentSession() 获得一个 Hibernate 会话。然后开始事务,执行工作,然后提交()或回滚(),最后关闭连接(连接对象将返回到池中)。当我们停止应用程序或关闭服务器时,休眠会话工厂将被销毁/关闭。如果你使用 HibernateTransactionManager,默认情况下,将使用 CurrentSessionContext 的线程实现。如果你想使用,jta 实现:你必须使用“JtaTransactionManager”作为事务管理器。

    【讨论】:

    • 这很酷,一个问题是你说“如果你使用 HibernateTransactionManager,默认情况下,将使用 CurrentSessionContext 的线程实现。”但是我怎样才能从官方文档中获得呢?
    猜你喜欢
    • 2016-04-12
    • 2021-09-28
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多