我试图将Envers集成到我的项目中。我正在使用Hibernate-envers 3.5.5-Final,Hibernate-core 3.5.5-Final,spring 3.0.7.RELEASE。
对于DAO Layer,我使用的是GenericDaoHibernate类。
我的applicationContext.xml包含:
<property name="eventListeners">
<map>
<entry key="post-insert" >
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="post-update">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="post-delete">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="pre-collection-update">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="pre-collection-remove">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="post-collection-recreate">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
</map>
</property>
已创建带注释的类的审计表,但通过在实体表中添加或更新行,_AUD表或REVINFO中不会插入任何行。
所以,我添加了一个新的监听器org.hibernate.ejb.event.EJB3PostInsertEventListener:
<property name="eventListeners">
<map>
<entry key="post-insert" >
<list>
<bean class="org.hibernate.envers.event.AuditEventListener" />
<bean class="org.hibernate.ejb.event.EJB3PostInsertEventListener" />
</list>
</entry>
<entry key="post-update">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="post-delete">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="pre-collection-update">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="pre-collection-remove">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="post-collection-recreate">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
</map>
</property>
问题仍然存在,现在实体表中没有插入记录。
欢迎提出任何建议。
感谢。
答案 0 :(得分:1)
行。
我解决了这个问题。
Firstibale,似乎使用Hibernate-core 3.5.5-Final,我们不需要org.hibernate.ejb.event.EJB3PostInsertEventListener,所以在我们的ApplicationContext-config.xml中我们应该只有这个配置:
<property name="eventListeners">
<map>
<entry key="post-insert" >
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="post-update">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="post-delete">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="pre-collection-update">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="pre-collection-remove">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
<entry key="post-collection-recreate">
<bean class="org.hibernate.envers.event.AuditEventListener" />
</entry>
</map>
</property>
其次,在我们的案例中,我们的项目使用两个转换管理器,因此对于注释@Transactionnal的服务,我们必须提到所使用的正确事务管理器的名称,这意味着所有服务都应注释为@Transactionnal(value =& #34; NAME_TX_MANAGER&#34)。这个问题的根源是,如果我们有自动提交,Envers就无法正常工作(如果我理解其文档的话)。
如果遇到同样的困难,我希望对其他访客有帮助。