Spring 数据 REST - @PrePersist 和 @HandleBeforeCreate 之间的区别?
Spring Data REST - difference between @PrePersist and @HandleBeforeCreate?
我使用 Spring Data Rest
而不是 JPA
映射。
JPA 提供 @PrePersist
方法注解,用于在 en 实体持久化到数据库之前调用的方法。
Spring Data Rest 为捕获实体创建事件时要调用的方法提供 @HandleBeforeCreate
注释。
这对我来说似乎相当。我什么时候应该使用一个,什么时候应该使用另一个?
- @HandleBeforeCreate 仅在 REST 请求进入时调用,但在实体生命周期期间调用@PrePersist。因此,如果您的调用路径不是通过 REST(例如通过直接调用实体管理器或由于 JPA impl 的内部级联操作),您将无法使用 @HandleBeforeCreate 捕获事件。
- 由于@HandleBeforeCreate 被Spring 调用,很容易将它放入一个bean 中并享受它的所有Spring 特性。实体侦听器的生命周期由 JPA impl 管理,因此它通常需要一些技巧才能连接到 Spring 生态系统。
例如,我使用@HandleBeforeCreate 而不是@PrePersist 进行安全检查。由于第 1 项,我只想检查公开的其余操作的安全性,并且由于第 2 项,我可以轻松地在我的方法中使用 @Secured 或 @PreAuth 注释来进行检查。
我使用 Spring Data Rest
而不是 JPA
映射。
JPA 提供 @PrePersist
方法注解,用于在 en 实体持久化到数据库之前调用的方法。
Spring Data Rest 为捕获实体创建事件时要调用的方法提供 @HandleBeforeCreate
注释。
这对我来说似乎相当。我什么时候应该使用一个,什么时候应该使用另一个?
- @HandleBeforeCreate 仅在 REST 请求进入时调用,但在实体生命周期期间调用@PrePersist。因此,如果您的调用路径不是通过 REST(例如通过直接调用实体管理器或由于 JPA impl 的内部级联操作),您将无法使用 @HandleBeforeCreate 捕获事件。
- 由于@HandleBeforeCreate 被Spring 调用,很容易将它放入一个bean 中并享受它的所有Spring 特性。实体侦听器的生命周期由 JPA impl 管理,因此它通常需要一些技巧才能连接到 Spring 生态系统。
例如,我使用@HandleBeforeCreate 而不是@PrePersist 进行安全检查。由于第 1 项,我只想检查公开的其余操作的安全性,并且由于第 2 项,我可以轻松地在我的方法中使用 @Secured 或 @PreAuth 注释来进行检查。