我正在尝试将Envers集成到我的项目中。我正在使用Hibernate-envers 3.5.5-Final,Hibernate-core 3.5.5-Final,spring 3.0.7.RELEASE。
对于DAO层,我使用的是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>
问题仍然存在,现在没有记录插入实体表中。
任何建议都欢迎。
谢谢。
好。
我解决了问题。
首先,似乎在Hibernate核心3.5.5-Final中,我们不需要org.hibernate.ejb.event.EJB3PostInsertEventListener,因此在我们的ApplicationContext- config.xml中,我们应该只有这个配置:
其次,在本例中,我们的项目使用两个事务管理器,因此对于注释为@Transactionnal的服务,我们必须提及所使用的适当事务管理器的名称,这意味着所有服务都应注释为@Transactionnal(value =“ NAME_TX_MANAGER”) 。此问题的根源在于,如果我们有自动提交功能(如果我对它的文档了解得很好),则Envers无法正常工作。
如果面临同样的困难,希望对其他访客有帮助。