JPA——Cascade理解

首先,我们提出两个比较有意思的问题:

  1. 我们得理解什么是JPA中的Cascade?
  2. 其次我们需要理解Cascade在什么情况下使用?

 

JPA中的Cascade是什么

JPA将实体状态转化为数据库的DML执行语句。一般情况下,我们都是对实体图(也可以称为实体网络图)进行操作,JPA 允许我们将实体状态更改从父实体传播到子实体。这些行为是通过 CascadeType 映射配置的。

 

JPA中的Cascade的使用场景是什么

必须明确一点的是:

是否应该使用级联是一个业务问题,而不是一个技术问题

我们只说明最普遍的情形,那就是一对多的情况,在一对多的级联中:

如果对象之间是组合关系,使用级联

如果是聚合关系,不用级联.

 

 

组合和聚合的区别:

这两个词的来源是面向对象的分析与设计的技术中产生的。

当一个对象A是由多个其它对象(B,C,D...)组成的,如果当A不存在了,那么B,C,D...的存在就没有意义的情况下那么它们之间就是组合关系。

如果当A不存在了,B,C,D...单独存在也是有意义的情况下就是聚合关系。

 

下面我们来举个例子,这个例子中是对JAVA文件的结构进行建模。如图所示:

某中sourceclass是java文件的信息。

sourcefield是java文件的信息。

sourcemethod是java文件的方法信息。

sourcemethodparameter是java文件的方法参数信息。

sourcemethodreturnvalue是java文件的方法返回值信息。

当一个java的文件被删除了,那么她所对应的属性信息,方法信息的存在就没有意义了。如果当删除java的文件信息的时候,没有删除她的属性信息和方法信息,那么就会留下很多的孤儿-垃圾数据。所以她们之间的关系就属于组合关系。在实体映射的时候,就应该把他们配置级联。

 

至于代码嘛,我们后文再来学习,后面的学习有两个原则,那就是:

1、具体的业务场景建模是怎么样的,是组合还是聚合

2、到底应该采用哪种具体的级联方式,而不是一味的采用Cascade.ALL

版权声明:著作权归作者所有。

thumb_up 0 | star_outline 0 | textsms 0