2015-10-07 72 views
5

我使用Spring Data Rest而不是JPA映射。Spring Data REST - @PrePersist和@HandleBeforeCreate的區別?

JPA提供@PrePersist註釋,用於在數據庫中存在en實體之前調用的方法。

Spring Data Rest提供了@HandleBeforeCreate註解,用於捕獲實體創建事件時要調用的方法。

這似乎相當於我。我什麼時候應該使用一個,什麼時候應該使用另一個?

回答

5
  1. @HandleBeforeCreate僅在REST請求進入時調用,但在實體生命週期中調用@PrePersist。因此,如果您的調用路徑不是通過REST(例如直接調用實體管理器或由於JPA impl的內部級聯操作),您無法使用@HandleBeforeCreate來捕獲事件。
  2. 由於@HandleBeforeCreate被Spring調用,所以很容易將它放入一個bean中並且享受它的所有Spring特性。實體監聽器的生命週期由JPA impl管理,所以它通常需要一些技巧連接到Spring生態系統。

例如,我使用@HandleBeforeCreate而不是@PrePersist來進行安全檢查。由於第1項,我只想檢查暴露的休息操作的安全性,並且由於第2項,我可以使用@Secured或@PreAuth註釋與我的方法進行檢查。

+0

感謝這個例子! –