关于Hibernate 完全性的支持 JPA 级联操作

本文不对JPA做详细介绍,也不介绍JPA的实现步骤,全以实现级联操作为主。

Hibernate对JPA标准有两套支持。

  1. 兼容性的支持:操作的接口是Hibernate原来框架的。只有映射注解使用JPA标准接口提供。
  2. 完全性的支持:操作的接口和映射的注解全部使用JPA的标准。
使用xml进行级联操作配置

关于Hibernate 完全性的支持 JPA 级联操作
由上述配置我们可以知道,配置级联操作我们需要配置cascade属性。同理我们可以知道使用注解的方式的时候可以尝试是否有@Cascade这个注解。
关于Hibernate 完全性的支持 JPA 级联操作
可以看到是有这个注解存在的,但是留一下会发现,这个注解是hibernate提供的。但我们需要使用 完全性的支持JPA,那我们需要的javax.persistence提供的才对。如果直接打上那么一个注解我们是找不到由javax.persistence提供的cascade的。本人也是在这里徘徊了一会。但是大家一起来看看我们上面的配置文件再想一想,既然我们的cascade是配置一对多关系时候的一个属性,那么这个cascade是否也会是某个注解中的属性呢?

果然,在这里我们找到了
关于Hibernate 完全性的支持 JPA 级联操作
在这里我们找到了由javax.persistence提供的CascadeType标签。里面有相对应的操作
关于Hibernate 完全性的支持 JPA 级联操作

  • CascadeType.PERSIST 级联持久化(保存)操作(持久保存拥有方实体时,也会持久保存该实体的所有相关数据。
  • CascadeType.REMOVE 级联删除操作,删除当前实体时,与它有映射关系的实体也会跟着被删除。
  • CascadeType.MERGE 级联更新(合并)操作。更新当前实体时,与它有映射关系的实体也会跟着被更新。
  • CascadeType.DETACH 级联脱管/游离操作。如果你要删除一个实体,但是它有外键无法删除,你就需要这个级联权限了。它会撤销所有相关的外键关联。
  • CascadeType.REFRESH 级联刷新操作。
  • CascadeType.ALL 拥有以上所有级联操作权限。