2013-08-19 7 views
1

Я получаю следующую ошибку при сохранении объекта домена hibernate.Hibernate Envers не работает с транзакциями JTA

org.springframework.orm.hibernate4.HibernateSystemException: Невозможно создать пересмотр из-за неактивную сделку; вложенное исключение org.hibernate.envers.exception.AuditException: Невозможно создать пересмотр из-за неактивного сделки

Если отключить Envers, все работает нормально, и объект сохраняется успешно.

<prop key="hibernate.listeners.envers.autoRegister">false</prop> 

Моя настройка заключается в следующем

Я включил следующие в моем sessionFactory боба

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" > 
... 
     <prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WeblogicTransactionManagerLookup</prop> 
     <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop> 
... 

Ищу вверх WebLogic источника данных с использованием follwing конфигурации

<jee:jndi-lookup id="dataSource" jndi-name="jdbc.myDsXA" /> 
<tx:jta-transaction-manager /> 

Что я делаю не так?

+0

У меня была такая же проблема. Я замечаю, что ответов нет, но мне интересно, если вы нашли что-нибудь в автономном режиме? –

+0

Нет, до сих пор не получается заставить его работать – jax

ответ

1

Я думаю, вы должны установить атрибут «jtaTransactionManager» в LocalSessionFactoryBean. Свойства не hibernate.transaction.manager_lookup_class и hibernate.transaction.factory_class больше не требуются в Hibernate 4.

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" > 
... 
    <property name="jtaTransactionManager" ref="transactionManager" /> 
... 
</bean> 

<tx:jta-transaction-manager /> 
+0

На самом деле у меня уже было это, но я его не публиковал '' – jax

0

В моем случае изменения способа я получил сеанс

от

@Transactional(readOnly = false) 
public T save(T t) { 
    Session session = sessionFactory.openSession(); 

в

@Transactional(readOnly = false) 
public T save(T t) { 
    Session session = sessionFactory.getCurrentSession(); 

Решенный вопрос.

0

Это не похоже, что вы делаете что-то неправильно. В настоящее время я сталкиваюсь с аналогичной проблемой с использованием Grails, и из моего поиска это выглядит как проблема с Hibernate ORM: HHH-8524.Обходной путь, как указано в ссылке, заключается в явном запуске транзакции Hibernate.