2013-08-19 52 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> 
... 

我使用的follwing配置

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

查找weblogic的數據源我究竟做錯了什麼?

+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

在我的情況變化,我得到了會議的方式

from

@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

它看起來好像你正在做任何錯誤的perse。我目前遇到了一個類似的問題,使用Grails,它從我的搜索中看起來像是一個Hibernate ORM的問題:HHH-8524。鏈接中指定的解決方法是明確開始Hibernate事務。