2013-01-02 124 views
0

我试图做一个Hibernate Envers实现与Spring,JBoss和Maven的结合。Hibernate Envers与JBoss,Spring和Maven - 不写审计记录

我有以下几点:

  • spring.version:3.1.0.RELEASE
  • hibernate.version:3.5.0决赛
  • log4j.version:1.2.14
  • 的JBoss -as-7.1.1.Final
  • MySQL数据库

在pom.xml我已经添加了必需的hiber内特 - envers:

<dependency>  
     <groupId>org.hibernate</groupId>  
     <artifactId>hibernate-envers</artifactId>  
     <version>${hibernate.version}</version> 
    </dependency> 

在我的Hibernate持久性类,我进口下列

import org.hibernate.envers.Audited; 

所以看起来

@Entity 
@Indexed 
@Audited 
@Table(name = "COM_TEST") 
public class MyTest extends AbstractReferenceDataObject { ... 

我已经确保有一个COM_TEST_AUD db表与相关的数据库列以及一个REVINFO数据库表。

当我运行我的代码时,它使用现有的hibernate实现更新COM_TEST中的记录。但是没有任何内容写入到COM_TEST_AUD或REVINFO数据库表中。

,我有以下特性在我的persistence.xml

<properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/> 
     <property name="hibernate.connection.autocommit" value="true" /> 
     <property name="hibernate.hbm2ddl.auto" value="validate"/> 
     <property name="hibernate.show_sql" value="false"/> 
     <property name="hibernate.cache.use_second_level_cache" value="true"/> 
     <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider"/> 
     <property name="hibernate.search.default.directory_provider" value="org.hibernate.search.store.FSDirectoryProvider"/> 
     <property name="hibernate.search.default.indexBase" value="./lucene/indexes"/> 
     <property name="hibernate.search.default.batch.merge_factor" value="10"/> 
     <property name="hibernate.search.default.batch.max_buffered_docs" value="10"/> 
    </properties> 

我已经试过几乎所有我能想到的。我可以看到我什么时候启动JBoss,它确实说明了它是如何需要的,并且罚款COM_TEST_AUD和REVINFO,所以看起来像那样。

我只是不能解决它为什么不写入数据库。没有什么写入日志文件和我有日志记录设置为:

 <logger category="org.hibernate"> 
      <level name="DEBUG"/> 
     </logger> 

我注意到,在JBoss模块目录下,它使用休眠,envers-4.0.1.Final.jar:

jboss-as-7.1.1.Final\modules\org\hibernate\envers\main 

我已经改变了我的项目的pom.xml是不是3.5.0决赛4.0.1.Final,但它并没有区别

是否有人可以帮忙吗?

+0

首先要检查的是事务设置。你使用什么样的交易? Envers听众是否在所有人都打电话时坚持一个实体? – adamw

回答

1

既然你在使用Hibernate 3.x中,你需要配置persistence.xml适当的事件侦听器,如Envers文档的Quickstart部分中提到:

<property name="hibernate.ejb.event.post-insert" 
     value="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener" /> 
<property name="hibernate.ejb.event.post-update" 
     value="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener" /> 
<property name="hibernate.ejb.event.post-delete" 
     value="org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener" /> 
<property name="hibernate.ejb.event.pre-collection-update" 
     value="org.hibernate.envers.event.AuditEventListener" /> 
<property name="hibernate.ejb.event.pre-collection-remove" 
     value="org.hibernate.envers.event.AuditEventListener" /> 
<property name="hibernate.ejb.event.post-collection-recreate" 
     value="org.hibernate.envers.event.AuditEventListener" /> 

注意:您没有说明您'通过JPA使用Hibernate,但是由于您提到了persistence.xml,您似乎正在使用JPA。如果现在是这种情况,那么配置有点不同,正如您在文档中看到的那样。

如果您使用的是Hibernate 4。x,此配置为not needed

相关问题