org.hibernate.HibernateException: getNamedQuery недействителен без активной транзакции

У меня есть исключение:

org.hibernate.HibernateException: getNamedQuery is not valid without active transaction    org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:340)
    $Proxy10.getNamedQuery(Unknown Source)

Вот моя конфигурация:

    ...
    <context:annotation-driven/>
    <beans:bean id="transactionManager" 
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <beans:property name="sessionFactory" ref="sessionFactory" />
    </beans:bean>       
    <tx:annotation-driven transaction-manager="transactionManager"/>
    ...

Кроме того, я добавил context:annotation-driven, так как tr:annotation-driven не работает, использует ли <tx:annotation-driven/> transactionManager, который получает свой собственный сеанс из Hibernate?

Я использовал свой производный sessionFactory с помощью Hibernate3 внутри аннотированной транзакции, так как мне настроить Spring для этого?


person Ann W.    schedule 26.04.2016    source источник


Ответы (1)


Менеджер транзакций зависит от фабрики сеансов, которую он использует для управления транзакциями.

Добавляя <tx:annotation-driven />, вы сообщаете Spring, как разграничиваются транзакции. В этом случае вы можете использовать аннотации.

См. страницу документации, как использовать Конфигурация на основе схемы XML:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- bean definitions here -->

</beans>
person Roman C    schedule 26.04.2016
comment
Это не работает для транзакций tx, поэтому я добавил элемент контекста и сопоставление, а также контекст: управляемый аннотациями, так как я получил сеанс из спящего режима напрямую, но бесполезно, по-прежнему нет транзакции. - person Ann W.; 27.04.2016
comment
Обновите библиотеки Hibernate как минимум до Hibernate 4, убедитесь, что они работают, прежде чем использовать транзакции. Также вам нужно @Transactional в репозиториях для разграничения ваших транзакций. - person Roman C; 06.05.2016