保存hibernate域对象时出现以下错误。
org.springframework.orm.hibernate4.HibernateSystemException:无法执行 由于非活动事务而创建修订;嵌套异常是 org.hibernate.envers.exception.AuditException:无法创建 由于非活动交易而进行修订
如果禁用envers,一切正常,对象保存成功。
<prop key="hibernate.listeners.envers.autoRegister">false</prop>
我的设置如下
我在sessionFactory
bean
<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数据源
<jee:jndi-lookup id="dataSource" jndi-name="jdbc.myDsXA" />
<tx:jta-transaction-manager />
我做错了什么?
答案 0 :(得分:1)
我认为你应该将“jtaTransactionManager”属性设置为LocalSessionFactoryBean。 Hibernate 4中不再需要属性hibernate.transaction.manager_lookup_class和hibernate.transaction.factory_class。
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
...
<property name="jtaTransactionManager" ref="transactionManager" />
...
</bean>
<tx:jta-transaction-manager />
答案 1 :(得分:1)
替换属性hibernate.transaction.factory_class
这
org.hibernate.transaction.JTATransactionFactory
到
org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory
为我解决了这个问题。
见这里:http://koenserneels.blogspot.de/2012/05/migrating-from-hibernate-3-to-4-with.html
答案 2 :(得分:0)
答案 3 :(得分: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();
解决了这个问题。
答案 4 :(得分:0)
看起来你没有做任何错误的事情。我目前正在使用Grails遇到类似的问题,在我的搜索中,它看起来像是Hibernate ORM的一个问题:HHH-8524。链接中指定的解决方法是显式启动Hibernate事务。