我正在尝试配置弹簧数据审计。
我使用 Hibernate 4.1.6、hibernate-jpa 2.0、spring-data-jpa 1.1.0、spring 3.1.2(我在依赖项中添加了 spring-aspects,因为没有它会出错)。
我的项目配置基于此示例,并进行了一些修改:
- 我的实体不扩展 AbstractAuditable 但实现 Auditable 接口
- 我没有将 jadira 属性放在哪里的 persistence.xml,而是在 DateTime 属性上使用了以下注释:
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
我没有任何错误,但审核不起作用:创建记录后审核字段为空。
有谁知道我做错了什么?我可以检查什么?欢迎任何建议。
这是实体代码:
@Entity
public class TestEntity implements Auditable<String, Long> {
@Column
@Id
@SequenceGenerator(...)
@GeneratedValue(...)
private Long id;
@Column
private String createdBy;
@Column
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime creationDate;
@Column
private String lastModifiedBy;
@Column
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime lastModifiedDate;
// getters and setters
}
这是弹簧上下文配置:
<jpa:repositories base-package="...." />
<jpa:auditing auditor-aware-ref="auditorAware" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="..." />
<property name="mappingResources">
<value>.../domain-orm.xml"</value>
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
...
</bean>
</property>
<property name="jpaProperties">
<util:properties>
<prop key="hibernate.generate_statistics">${hibernate.generate_statistics}</prop>
</util:properties>
</property>
</bean>
<context:annotation-config />
<bean id="auditorAware" class="...TestAuditorAware"/>
我的审计员知道:
public class TestAuditorAware implements AuditorAware<String> {
@Override
public String getCurrentAuditor() {
return "TEST";
}
}
我的域-orm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"
version="2.0">
<persistence-unit-metadata>
<persistence-unit-defaults>
<entity-listeners>
<entity-listener class="org.springframework.data.jpa.domain.auditing.support.AuditingEntityListener" />
</entity-listeners>
</persistence-unit-defaults>
</persistence-unit-metadata>
</entity-mappings>
更新:我认为问题与未注册的 AuditingEntityListener 有关。我添加了 orm.xml 配置,但这并没有解决。我认为听众仍然没有注册。