Сессия Hibernate не привязана к потоку, и конфигурация не позволяет создавать нетранзакционный сеанс здесь - PullRequest
26 голосов
/ 20 июля 2010

О чем эта ошибка? Msgstr " Сессия Hibernate не привязана к потоку, и конфигурация не позволяет создавать нетранзакционный сеанс здесь " Мой весенний конфигурационный файл выглядит примерно так.

<bean id="jndiDataSource"
    class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:/devDS</value>
    </property>
</bean>
<bean id="stsaDBFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="jndiDataSource" />
    <property name="annotatedClasses">
        <list>
            <value>xx.yy.zz.User</value>
            <value>xx.yy.UserResponse</value>

        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbmddl.auto">create</prop>
        </props>
    </property>
</bean>

<!-- ################################### Aspects ################################################## -->

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

Все тесты DAO проходят, когда я тестирую их вне контейнера с использованием junit. Когда я внедряю его в jBoss как приложение портала, я получаю это исключение. Кроме того, он отлично работает, если я удаляю конфигурацию портала и превращаю его в простое веб-приложение и развертываю его на jboss.

Ответы [ 2 ]

35 голосов
/ 20 июля 2010

Вы определили TransactionManager в своей конфигурации Spring, но пытаетесь выполнить запрос гибернации в методе, который не является транзакционным. Попробуйте добавить @Transactional в ваш метод или класс.

4 голосов
/ 21 мая 2011

Я справился с этой проблемой, указав current_session_context_class в hibernate config как "thread" в соответствии с простой конфигурацией, показанной в документации по конфигурации hibernate .

Но он рекомендует, чтобы он не был безопасен для производственного использования.

Попытка добавить следующее в hibernate config также должна помочь:

<property name="current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property>

Проверьте http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/architecture.html#architecture-current-session для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...