我在使用 Envers 时遇到了依赖问题。
在 Envers 世界的某个地方,存在对 class 的依赖org.hibernate.integrator.spi.Integrator
。这可以在hibernate-core.4.1.7.Final
但是,如果我使用,hibernate-core.4.1.7.Final
那么我会遇到一个依赖问题 ( NoClassDefFoundError
) org.hibernate.event.PreCollectionUpdateEventListener
,可以在hibernate-core.3.6.10.Final
.
所以我有点吃不消,因为 Maven 不会将这两个版本都放在类路径中。
任何有解决方案/想法/解决方案的聪明人。
谢谢亚当
更新: 感谢@adamw 的回复,但这不起作用。让我更深入地了解我所做的事情:
build.xml:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.1.7.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>4.1.7.Final</version>
</dependency>
然后在我的实体代码中输入:
@Audited
@Entity
public class Company
...
现在,当我运行集成测试时,不会创建 _AUD 表。
因此,我将其添加到persistance.xml
文件中(按照此处的说明):
<properties>
<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.Audit.EventListener" />
<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" />
</properties>
然后我得到一个 Spring 错误,导致:
javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build EntityManagerFactory
那么我该如何解决这个问题?其他人在使用 Spring、Envers 和 Maven 时有这个问题吗?
哦,顺便说一句。代码段中指定的侦听properties.xml
器在任何一个 jar 文件依赖项中都不存在。