2015-09-13 16 views
1

我正在使用Spring Data Neo4j 4.0.0.RELEASE,并希望利用内置的数据操作事件来即时插入一些审计信息(例如时间戳)。 The documentation似乎表明,如果我直接使用Neo4jTemplate,这只适用于我。SDN4 - 与GraphRepository兼容的实体生命周期事件处理程序

是否有任何类似的钩子可用于GraphRepository抽象?也就是说,有没有一种方法可以让我挂钩图形库操作(Spring DataJPA?)我已经编写了一些测试,并且可以确认记录的事件不会在我使用GraphRepository时触发。

+0

这些钩子也应该与存储库一起使用,因为它在内部使用模板。 –

+0

嗯,我不相信是这样,至少根据我在'GraphRepositoryImpl'中的源代码中看到的情况。现在我通过创建一个自定义方面来解决这个问题,该方法拦截对“GraphRepository.save(..)”的调用并触发数据操作事件。 – simonl

+0

不知道你在看什么,但[this](https://github.com/spring-projects/spring-data-neo4j/blob/master/spring-data-neo4j/src/main/java/org/ springframework/data/neo4j/repository/AbstractGraphRepository.java#L91)显然使用了一个模板...所以不确定你正在查看哪个实现。 –

回答

2

AbstractGraphRepository来自3.x代码库,所以在这里并不直接相关。

如前所述,SDN 4尚未提供对Spring的RepositoryEventListener接口的自动支持。在SDN 4.0中正确实现事件侦听器很复杂,因为底层保存机制的本质,它保留了整个“脏”对象树,而不仅仅是一个顶级实体。如果要拦截的对象不是要保存的顶级实体,则它的事件侦听器不会触发。

SDN开发团队目前正在考虑让事件处理程序触发可保存在保存树中任意深度的对象的最佳方法。

与此同时,simonl建议的解决方案应该工作。