我目前正在开发一个使用 Spring Data Neo4j 的项目。每当创建 NodeEntity 时,我都想创建一个引用的 Audit NodeEntity,其中包含创建日期和用户。
我想出的一个解决方案是编写一个 AOP Aspect,它与我的服务层的 create 方法挂钩。这适用于没有级联的实体,但级联的实体呢?这没有在我的服务层中显式传递,因此我的 AOP 类不会拦截它们。JPA 中是否有类似实体侦听器的概念,或者我如何才能融入这种机制?
我目前正在开发一个使用 Spring Data Neo4j 的项目。每当创建 NodeEntity 时,我都想创建一个引用的 Audit NodeEntity,其中包含创建日期和用户。
我想出的一个解决方案是编写一个 AOP Aspect,它与我的服务层的 create 方法挂钩。这适用于没有级联的实体,但级联的实体呢?这没有在我的服务层中显式传递,因此我的 AOP 类不会拦截它们。JPA 中是否有类似实体侦听器的概念,或者我如何才能融入这种机制?
从 Spring Data Neo4j 2.2 开始,我们可以使用 AuditingEventListener 来审计实体。Spring Data 1.5 提供了@CreatedDate、@CreatedBy、@LastModifiedDate和@LastModifiedBy注解。您可以按如下方式使用它们:
@NodeEntity
public class Entity {
@GraphId
private Long id;
@CreatedDate
private Long date;
}
确保配置 AuditingEventListener:
@Configuration("db")
@EnableNeo4jRepositories(basePackages = { "your.package" })
@EnableTransactionManagement
public class DatabaseSpringConfiguration extends Neo4jConfiguration {
@Bean(destroyMethod = "shutdown")
public EmbeddedGraphDatabase graphDatabaseService() {
return new EmbeddedGraphDatabase("data/neo4j.db");
}
@Bean
public AuditingEventListener auditingEventListener() throws Exception {
return new AuditingEventListener(new IsNewAwareAuditingHandler<Object>(isNewStrategyFactory()));
}
}
Spring Data Neo4j (SDN)在 2.1 版本中引入了生命周期事件的概念。这也适用于级联实体。