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

JR *_*ily 6 java jpa spring-data-jpa spring-data-rest

我使用Spring Data Rest覆盖JPA映射.

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

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

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

tah*_*agh 7

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

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