春天& Hibernate:无法绑定会话。

时间:2013-04-22 11:01:52

标签: spring hibernate spring-transactions

生产中的时间我们有下一个错误:

2013-04-18 20:47:50,199 http-0.0.0.0-8443-35 ERROR [Jersey Web Application]] [userId: 57916] Servlet.service() for servlet Jersey Web Application threw exception
java.lang.IllegalStateException: Already value [org.springframework.orm.hibernate3.SessionHolder@4cccafeb] for key [org.hibernate.impl.SessionFactoryImpl@1457e272] bound to thread [http-0.0.0.0-8443-35]
    at org.springframework.transaction.support.TransactionSynchronizationManager.bindResource(TransactionSynchronizationManager.java:189)       

对于Jersey RESTFull服务的每个请求,我们都有针对开放会话的Hibernate会话过滤器。

com.mycompany.SessionPerRequestHelper {
    public static Session openSession() {
        SessionFactory sessionFactory = getSessionFactory();

        Session sess = sessionFactory.openSession();
        sessThreadLocal.set(sess);

        TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(sess));
        TransactionSynchronizationManager.initSynchronization();

        return sess;
    }
}

Hibernate上下文配置:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:com/transportexchangegroup/domain/hibernate.cfg.xml" />
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>

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

和hibernate.cfg

<hibernate-configuration>
    <session-factory>
        <property name="dialect">org.hibernatespatial.postgis.PostgisDialect</property>
        <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
        <property name="current_session_context_class">thread</property>
    </session-factory>
</hibernate-configuration>

1 个答案:

答案 0 :(得分:0)

最好使用OpenSessionInViewFilter而不是SessionPerRequestHelper

相关问题