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

标签 java jpa spring-data-jpa spring-data-rest

我在 JPA 映射上使用 Spring Data Rest

JPA 提供了@PrePersist 注解,用于在数据库中实体持久化之前调用的方法。

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

这对我来说似乎相当。什么时候应该使用一个,什么时候应该使用另一个?

最佳答案

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

例如,我使用@HandleBeforeCreate 而不是@PrePersist 进行安全检查。由于第 1 项,我只想检查公开的剩余操作的安全性,并且由于第 2 项,我可以轻松地在我的方法中使用 @Secured 或 @PreAuth 注释来进行检查。

关于java - Spring Data REST - @PrePersist 和@HandleBeforeCreate 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32989537/

相关文章:

java - 如何结合 hibernate 映射的注释?

java - 将 xmlGregorianCalendar 转换为 Date 并反转

java - 如何从andEngine GLES2中的 Sprite 表中获取特定的 Sprite ?

java - Spring Data Rest - 具有默认值的参数

java - 为什么这些正则表达式在 Java 中执行起来很慢?

mysql - JPA 不允许实体由来自多个表的列组成?

postgresql - 使用 JPA 而不是 native 查询在 postgres 中获取序列的下一个值

java - 在 hibernate (springboot)中使用左连接和分页编写 sql native 查询

java - 带有 Java 11 : Unable to resolve persistence unit root URL 的 Spring Boot 2.1

java - 如何在 2-3 树 java 中找到正确的子节点进行搜索