2015-09-13 46 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建議的解決方案應該工作。