AuditException:由于非活动事务而无法创建修订 [英] AuditException: Unable to create revision because of non-active transaction

查看:254
本文介绍了AuditException:由于非活动事务而无法创建修订的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在更新我的应用程序的框架,现在我正在尝试使用JPA配置hibernate envers来审计某些域。



定期持久性正常工作审核失败,错误如下



我有这个错误

  org.springframework.orm.hibernate4.HibernateSystemException:由于非活动事务而无法创建修订;嵌套的异常是org.hibernate.envers.exception.AuditException:无法创建修订,因为非活动事务
在org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:218)
在org.springframework.orm.hibernate4.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:107)
....

我的配置是:

 <! - 如何包含多个基本包 - > ; 
<! - 激活bean类中要检测的各种注释:Spring的@Required和@Autowired等等 - >
< context:annotation-config />
<! - 扫描基础包中的组件(查找注释) - >
< context:component-scan base-package =com.lotjm/>
< context:property-placeholder location =classpath:./ properties / database.properties/>

< bean id =transactionManagerclass =org.springframework.orm.jpa.JpaTransactionManager>
< property name =jpaDialect>
< bean class =org.springframework.orm.jpa.vendor.HibernateJpaDialect/>
< / property>
< / bean>

< bean id =entityManagerFactory
class =org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean>
< property name =packagesToScanvalue =com.lotjm/>
< property name =dataSourceref =dataSource/>

< property name =jpaVendorAdapter>
< bean class =org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter>
< property name =generateDdlvalue =false/>
< property name =showSqlvalue =true/>
< / bean>
< / property>
< property name =jpaPropertyMap>
<道具>
< prop key =hibernate.show_sql> true< / prop>
< prop key =hibernate.dialect> org.hibernate.dialect.MySQLDialect< / prop>
< prop key =hibernate.hbm2ddl.auto> update< / prop>
< prop key =hibernate.ejb.naming_strategy> org.hibernate.cfg.ImprovedNamingStrategy< / prop>
< prop key =org.hibernate.envers.audit_strategy_validity_store_revend_timestamp> true< / prop>
< /道具>
< / property>

< property name =persistenceProvider>
< bean class =org.hibernate.jpa.HibernatePersistenceProvider>< / bean>
< / property>

< / bean>

<! - Need for Repository抽象 - >
< jpa:repositories base-package =com.lotjm.repository
factory-class =org.springframework.data.envers.repository.support.EnversRevisionRepositoryFactoryBean/>

< tx:注解驱动的事务管理器=transactionManagerorder =1/>

< bean id =hibernateTransactionManagerclass =org.springframework.orm.hibernate4.HibernateTransactionManager>
< property name =sessionFactoryref =sessionFactory>< / property>
< / bean>

< bean id =dataSourceclass =org.springframework.jdbc.datasource.DriverManagerDataSource>
< property name =driverClassNamevalue =$ {jdbc.driverClassName}/>
< property name =urlvalue =$ {jdbc.url}/>
< property name =usernamevalue =$ {jdbc.username}/>
< property name =passwordvalue =$ {jdbc.password}/>
< / bean>

< bean id =sessionFactoryclass =org.springframework.orm.hibernate4.LocalSessionFactoryBean>
< property name =dataSource>
< ref bean =dataSource/>
< / property>
< property name =hibernateProperties>
<道具>
< prop key =hibernate.dialect> org.hibernate.dialect.MySQLDialect< / prop>
< prop key =hibernate.show_sql> true< / prop>
< prop key =hibernate.hbm2ddl.auto>验证< / prop>
< /道具>
< / property>

< property name =annotatedClasses>
< list>
< value> com.lotjm.domain.User< / value>
< value> com.lotjm.domain.Application< / value>
<值> com.lotjm.domain.Project< /值>
<值> com.lotjm.domain.Document< /值>
<值> com.lotjm.domain.AbstractAuditingEntity< /值>
< / list>
< / property>
< property name =namingStrategy>
< bean class =org.hibernate.cfg.ImprovedNamingStrategy/>
< / property>
< / bean>

< bean id =auditingProviderclass =com.lotjm.config.audit.UsernameAuditorAware/>

< bean id =dateTimeServiceclass =com.lotjm.config.audit.CurrentTimeDateTimeService/>

< bean id =dateTimeProviderclass =com.lotjm.config.audit.AuditingDateTimeProvider>
< constructor-arg index =0ref =dateTimeService/>
< / bean>


< / beans>

任何有关如何解决问题的建议?

Tks

解决方案

在我们的Dao类函数中添加@Transactional,这个sol


I have been updating the frameworks on my application and now I'm trying to configure hibernate envers with JPA to audit some domains.

Regular persistence is working properly by Audit is failing with the error below

I've got this error

org.springframework.orm.hibernate4.HibernateSystemException: Unable to create revision because of non-active transaction; nested exception is org.hibernate.envers.exception.AuditException: Unable to create revision because of non-active transaction
    at org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:218)
    at org.springframework.orm.hibernate4.SpringSessionSynchronization.beforeCommit(SpringSessionSynchronization.java:107)
    ....

My configuration is:

  <!--  How to include more then one base package -->
  <!--Activates various annotations to be detected in bean classes: Spring's @Required and @Autowired and so on-->
  <context:annotation-config/>
  <!--Scanning components in base-package (look for annotations) -->
  <context:component-scan base-package="com.lotjm"/>
  <context:property-placeholder location="classpath:./properties/database.properties"/>

  <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="jpaDialect">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
    </property>
  </bean>

  <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="packagesToScan" value="com.lotjm"/>
    <property name="dataSource" ref="dataSource"/>

    <property name="jpaVendorAdapter">
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="generateDdl" value="false"/>
        <property name="showSql" value="true" />
      </bean>
    </property>
    <property name="jpaPropertyMap">
      <props>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.hbm2ddl.auto">update</prop>
        <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
        <prop key="org.hibernate.envers.audit_strategy_validity_store_revend_timestamp">true</prop>
      </props>
    </property>

    <property name="persistenceProvider">
      <bean class="org.hibernate.jpa.HibernatePersistenceProvider"></bean>
    </property>

  </bean>

  <!-- Need for Repository abstraction -->
  <jpa:repositories base-package="com.lotjm.repository"
                    factory-class="org.springframework.data.envers.repository.support.EnversRevisionRepositoryFactoryBean"/>

  <tx:annotation-driven transaction-manager="transactionManager" order="1"/>

  <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
  </bean>

  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
  </bean>

  <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource">
      <ref bean="dataSource"/>
    </property>
    <property name="hibernateProperties">
      <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.hbm2ddl.auto">validate</prop>
      </props>
    </property>

    <property name="annotatedClasses">
      <list>
        <value>com.lotjm.domain.User</value>
        <value>com.lotjm.domain.Application</value>
        <value>com.lotjm.domain.Project</value>
        <value>com.lotjm.domain.Document</value>
        <value>com.lotjm.domain.AbstractAuditingEntity</value>
      </list>
    </property>
    <property name="namingStrategy">
            <bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
    </property>
  </bean>

  <bean id="auditingProvider" class="com.lotjm.config.audit.UsernameAuditorAware"/>

  <bean id="dateTimeService" class="com.lotjm.config.audit.CurrentTimeDateTimeService"/>

  <bean id="dateTimeProvider" class="com.lotjm.config.audit.AuditingDateTimeProvider">
    <constructor-arg index="0" ref="dateTimeService"/>
  </bean>

  <jpa:auditing auditor-aware-ref="auditingProvider" set-dates="true" date-time-provider-ref="dateTimeProvider"/>

</beans>

Any suggestion on how to fix it?

Tks

解决方案

Add @Transactional before our function in Dao Class,this sol

这篇关于AuditException:由于非活动事务而无法创建修订的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆