Spring Data REST – @PrePersist和@HandleBeforeCreate之间的区别?

我在JPA映射上使用Spring Data Rest

JPA为在DB中实体的持久性之前调用的方法提供@PrePersist注释。

Spring Data Rest为捕获实体创建事件时要调用的方法提供@HandleBeforeCreate注释。

这似乎与我相当。 我何时应该使用另一个?何时应该使用另一个?

  1. 只有在REST请求进入时才会调用@HandleBeforeCreate,但在实体生命周期期间调用@PrePersist。 因此,如果您的调用路径不是通过REST(例如通过直接调用实体管理器或由于JPA impl的内部级联操作),则无法使用@HandleBeforeCreate捕获事件。
  2. 由于@HandleBeforeCreate是由Spring调用的,因此很容易将它放入bean中并享受所有Springfunction。 实体监听器的生命周期由JPA impl管理,因此通常需要一些技巧才能连接到Spring生态系统。

例如,我使用@HandleBeforeCreate而不是@PrePersist来进行安全检查。 由于第1项,我只想检查暴露rest操作的安全性,由于第2项,我可以轻松地使用@Secured或@PreAuth注释和我的方法进行检查。