目前,我有一個場景,我想為執(zhí)行的查詢添加事件監(jiān)聽器。我的實體監(jiān)聽器public class EntityListener implements PostInsertEventListener, PostUpdateEventListener, PostDeleteEventListener {我的倉庫@Transactional@Modifying@Query(value = "UPDATE example e SET e.name = :name WHERE e.id = :id", nativeQuery = true) void testUpdatedQuery(@Param("name") String name, @Param("id") String id);如果我使用 spring-data-jpa 的方法,事件偵聽器工作正常,但如果我嘗試上面的本機查詢,我將無法觸發(fā)事件。所以,我的問題是如何收聽“本機查詢”事件?
1 回答

繁花如伊
TA貢獻2012條經(jīng)驗 獲得超12個贊
所以,我的問題是如何收聽“本機查詢”事件?
您至少不能以類似于 EntityListener 的方式進行。這樣做的原因是無法確定給定更新的受影響實體。
我看到以下選項:
實現(xiàn)使用相同 where 子句加載受影響實體的自定義方法,然后觸發(fā)某種事件機制。
正如 Zorglube 建議的那樣,您還可以使用數(shù)據(jù)源代理來攔截每個 SQL 查詢,但這對于您的用例來說可能是低級別的,因為您會看到大量您可能不關心的語句,因為它們是由您創(chuàng)建的JPA 實施。
添加回答
舉報
0/150
提交
取消