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

 

注:本文的图片来源于,感谢感谢。

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

相关推荐

JPA架构(JPA - Architecture)

今天我们来学习一下JPA的架构,首先问一个问题,大家学习理解一个架构有什么好的方法呢?对于我自己来说,我觉得架构图是理解架构最好的方式以上就是JPA的架构图,我们可以知道,JPA的主要部分包括五个类: 第一个类EntityManagerFactory,我们可以称为实体管理器工厂类,很显然,这个类的作用是创建和管理多个实体管理器类,因此,我们可以大胆猜测,实体管理器工厂类和实体管理器是一对

JPA实体状态深入理解

我们在学习JPA实体状态的时候,常常会问,JPA的实体有多少状态呢?相信这个问题不难回答:瞬时态(transient)托管态(persistent)游离态(detached)移除态(removed)注意:这里最后一个移除态,有的时候也叫删除态(deleted),至于它和移除态有啥区别,暂时没有想到,如果您对此有更加深刻的理解,请留言回复。为什么会有这四种状态呢?啥,这个也有为啥,网上不是都这么说的

初步理解RxJs

         学习是一个由浅入深的过程,如果能够理解并掌握二八原则(帕累托法则),那么我们对知识的学习定会事半功倍,甚至事半多倍。对基础知识的理解决定了对知识理解的深度。RxJs定义        RxJS是ReactiveX在JavaScript上的一个派生。ReactiveX是一个应用比较广泛的响应式

RxJs——subject理解一

什么是subject首先我们来理解什么是subject,按照官方的定义:A Subject is a special type of Observable that allows values to be multicasted to many Observers.Subjects are like EventEmitters.从定义我们看出subject就是一种允许发送值到多个观察者的特殊类型的

RxJs——Subject理解二

上一节我们对subject有了初步理解,今天我们继续学习subjectReplaySubject介绍这个ReplaySubject之前,我们说下一种使用场景1、我们创建一个subject2、在应用的某个地方,我们向subject推送值,但此时没有订阅3、在某个时点,有第一个观察者开始订阅4、我们期望观察者能接收之前主题推送的值(可能是全部值或者时其中一个)5、实际上啥都没发生,因为主题不能存储记忆

CKEditor5——模型理解(一)

我们知道,CK5实现了一个MVC的架构,从今天开始,我们一步一步深入学习模型,视图,以及模型和视图之间的转换。今天我们开始模型的学习。首先,我们看模型的定义:The model is implemented by a DOM-like tree structure of elements and text nodes.模型由两类节点构成,分别是元素节点和文本节点,模型是一种类Dom树结构。我们知道

javascript——generator理解

最近在学习CK5的时候,遇到了一个函数:function* _getAllUpcastDefinitions( definition ) { if ( definition.model.values ) { for ( const value of definition.model.values ) { const model = { key: definition.model.key

CKEditor5——模型理解(六:Range)

上一节我们主要介绍了模型中的Position这个关键的类,今天我们开始学习Range这个类。简单来说的话,如果Position表示一个点的话,那么Range是不是可以理解为一条线段呢?这个线段有一个startPostion,endPosition以及线段的长度等属性,我们暂且这么认为,那么我们可以看看Range官方的文档。从文档中看到,Range类有五个属性:Range属性start:Positi

CKEditor5——模型理解(七:Selection)

昨天我们学习了Range的一些API使用,今天我们看看另一个重要的类Selection的API:Selection的作用是记录鼠标在文档上的选择区域,如果是单个用户在编辑一份文档的时候,选择应该就是一个Range,如果是多个用户在编辑一份文档的时候,那么选择的区域就应该是多个range。因此,我大胆的猜测,Selection中应该有Range数组。我们来看看吧。Selection属性anchor

RxJs——Subscription理解

我們前段時間學習了Observable相關的知識,今天我們學習另一個重要的概念:Subscription。首先,我們看看Subscription官方文檔的介紹如下:What is a Subscription? A Subscription is an object that represents a disposable resource, usually the execution of an