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