【发布时间】:2016-10-05 01:21:54
【问题描述】:
当我使用 @RepositoryEventHandler 时,它的方法只有在通过 HTTP 进入存储库时才会被调用。
有什么理由吗?好的,它被称为 Spring Data REST,但是当我直接调用我的存储库而不是通过 HTTP 时,调用处理程序不是很有用吗?
有什么方法可以在直接调用时调用处理程序(一些神奇的 AOP 东西)?
谢谢
【问题讨论】:
标签: spring-data-rest
当我使用 @RepositoryEventHandler 时,它的方法只有在通过 HTTP 进入存储库时才会被调用。
有什么理由吗?好的,它被称为 Spring Data REST,但是当我直接调用我的存储库而不是通过 HTTP 时,调用处理程序不是很有用吗?
有什么方法可以在直接调用时调用处理程序(一些神奇的 AOP 东西)?
谢谢
【问题讨论】:
标签: spring-data-rest
原因是不同 Spring Data 模块所涵盖的不同持久性机制已经附带了事件机制。根据您使用的机制,您现在可以使用不同的机制。
不幸的是,这不能统一为例如使用 JPA,并非所有持久性操作都需要首先通过存储库,因为 JPA 会自动刷新在 EntityManager 刷新时对附加实例所做的所有更改。在这种情况下,即使是存储库实例上的 AOP 也无济于事。
所以你基本上有两个选择:
【讨论】:
我不知道我在下面从其他 stackoverflow 问题中提出的解决方案是否会被 @Olivier-drotbohm 视为可以接受,但来自:
SpringDataRest @RepositoryEventHandler not running when Controller is added
和
@RepositoryEventHandler events stop with @RepositoryRestController
您可以注入/自动装配“ApplicationEventPublisher”并手动触发 BeforeCreateEvent/AfterCreateEvent 以触发 RepositoryEventHandler。
这不是一个完美的解决方案,但我希望它对你来说已经足够好了(我们已经测试过了:它有效)。
【讨论】: