2015-10-07 43 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

感谢这个例子! –