CascadeType级联关系
来源:互联网 发布:linux 云硬盘 挂载 编辑:程序博客网 时间:2024/06/06 01:35
菜鸟的一点体会记录,难免有错,望能指点,不胜感激,也可粗言相加,当做激励,若能有助于人,万分荣幸~
CascadeType级联关系
CascadeType.PERSIST —-级联保存
CascadeType.MERGE —-级联更新
CascadeType.REMOVE —-级联删除
CascadeType.REFRESH —-级联刷新
CascadeType.ALL —-级联所有
OrphanRemoval —-去掉孤值
讲解
- 以下用数据集和字段一对多关联关系为例,字段是多的一方,即控制方,通过数据集id来管理关系,字段中使用@JoinColumn(name = “DATA_SET_DEF_ID”)来保存数据集,注意@JoinColumn和mappedBy冲突,而数据集是关系被控方,其使用mappedBy表明关系被控方。
- 级联注解的意思是当级联所在的类进行相应操作时,标有级联关系的属性按照级联注解进行相应操作
- CascadeType.PERSIST–当数据集中的字段有此注解时,新建字段和数据集,然后字段set到数据集中,只保存数据集时这些字段也会自动保存
- CascadeType.MERGE–当数据集中的字段有此注解时,修改字段,然后更新数据集时这些字段会自动更新
- CascadeType.REMOVE–当数据集中的字段有此注解时,删除数据集,那么其字段也会被删除
- CascadeType.REFRESH–当数据集中的字段有此注解时,且用户A和B同时操作此字段,当A先保存数据集后,在B保存前会先刷新数据集中关联的字段,然后再进行保存。
- CascadeType.ALL–包含以上所有级联操作,注意因包含级联删除,所以使用时考虑是否要有级联删除操作。
- orphanRemoval–当数据集中的字段有此注解时,若值为false,则做更新操作时会将不再关联的字段中的数据集id置null,从数据集中找不到字段了,但值为true时,这些不再关联的字段会从数据库中删除
实例
数据集
@Entity@Table(name = "DATA_SET_DEF")public class DataSetDef extends BaseDomain implements Serializable {private static final long serialVersionUID = 1L;/** * 字段定义 */@OneToMany(mappedBy = "dataSetDef", cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE })private List<FieldDef> fieldDefs;/** * 数据集分类分享信息 */@OneToMany(mappedBy = "dataSetDef", cascade = CascadeType.REMOVE)@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)private List<DataSetInfo> dataSetInfoes;//getter/setter.....
字段
@Entity@Table(name = "DATA_SET_DEF_FIELD")public class FieldDef extends DimensionValue implements Cloneable, Serializable {private static final long serialVersionUID = 1L;/** * 所属数据集 */@ManyToOne@JoinColumn(name = "DATA_SET_DEF_ID")@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)private DataSetDef dataSetDef;//getter/setter...
数据集分享信息
@Entity@Table(name = "DATA_SET_INFO")public class DataSetInfo extends BaseDomain implements Serializable {private static final long serialVersionUID = 1L;/** * 数据集 */@ManyToOne@JoinColumn(name = "DATA_SET_DEF_ID")private DataSetDef dataSetDef;//getter/setter...
说明:数据集和字段是一对多关系,当操作数据集时需要将其字段也进行级联保存、更新、删除,所以在数据集的字段属性上添加级联注解,将字段数组放到数据集中,保存数据集时自动保存字段。在字段一侧不存在单独的保存,字段都是依赖数据集进行操作的,所以在字段一侧不需要配置级联操作。同样,新建、更新数据集时不需要对数据集分享信息进行保存,所以不添加PERSIT, MERGE,但删除数据集时相应的数据集分享也就没有存在的意义了,需要级联删除。
mappedBy的作用和关系删除
- 用来表示谁作为主控方。主控方的意思是删除要由谁来操作,当含有级联关系时,只有作为主控方的一方才能进行删除,非主控方是无法删除含有级联关系的对象的。
- 例如:一对多关系中,一个学生对应一个班级,一个班级有多个学生,在学生中保存班级的id,当学生作为主控方时,可以删除学生对象,此学生和班级的关系也自动删除,注意是删除关系,但是班级是非主控方,删除班级时必须先把其中的学生都删除后才能删除班级,直接删除班级是无法将和学生的关联关系也删除的(关联关系的删除意思是关联的class_id=null)
- mappedBy=“xxx”,这个xxx所代表的类即为非主控方,mappedBy写在主控方的类中,mappedBy写在哪个属性上面哪个属性就为主控方。
- 一般一对多关联会有主控方的设置,但如果想双方都可以进行删除,即可以把关联关系删除掉,那么mappedBy就不能写了,而是换成主控方一样的@JoinColumn(name = “CLASS_ID”),这样双方删除的时候都可以将本身删除并将关联关系置null(此处应用于用户中关联了某个组织关系,用户中有组织id,删除用户没问题,但是删除组织就要用这种配置方式了)
阅读全文
0 0
- CascadeType级联关系
- CascadeType.PERSIST无法级联保存
- JPA级联操作详解——级联删除(CascadeType.REMOVE)
- jpa级联操作详解1-级联保存(CascadeType.PERSIST)
- jpa级联操作详解1-级联保存(CascadeType.PERSIST)
- jpa级联操作详解2--级联删除(CascadeType.REMOVE)
- jpa级联操作详解3--级联删除(2)(CascadeType.REMOVE)
- 级联关系
- manyToMany,设置了“CascadeType.PERSIST”,无法级联存储
- 关于JPA cascade = CascadeType.PERSIST级联保存的笔记
- hibernate的级联(hibernate注解的CascadeType属性)
- Hibernate cascade级联属性的CascadeType的用法
- 表级联关系
- Hibernate (cascade)级联关系
- Hibernate级联关系问题
- Hibernate级联关系总结
- hibernate 级联关系
- MySql的级联关系
- 帧动画
- 回访管理系统
- Codeforce 792B Counting-out Rhyme
- Tomcat配置通过域名访问该项目
- 软件测试学习笔记_软件测试的基本概念
- CascadeType级联关系
- java 策略设计模式
- 先码后看 Tomcat是怎么启动容器的——Lifecycle篇 侵立删
- HDFS HA以及Federation,Zookeeper概述
- ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
- ssh免密登录的一个问题解决方法
- Spring Data JPA 配置数据库表根据实体属性自动创建表结构
- 微信开发中三种防注入的查询方法
- Python 3 多线程下载百度图片搜索结果