JPA OneToMany级联更新 及 orphanRemoval = true 说明
下面是一个例子: Employee ---- Address (假设为单向one-to-many)class Employee { @oneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true) @JoinTable(JoinColumn="Employee_id") private Set<Address> addresses; // [当Employee和Address均处于关联时]这种场合设置cascade和orphanRemoval是一样的效果,只要设置一种就好 // [当Employee和Address均不处于关联时,比如设置address中某条数据为空, 仅设置Cascade=Remove时,当操作到Employee只会将其对应的Address删掉 // 设置orphanRemoval=true时,会将FK上Null对应的数据都会删掉(自动去孤子) }注意加入的位置只能在one的一方设置orphanRemovalcascade所有关系都可设置
oneToMany 使用:
示例:Employee与Phone为例.
1、类定义如下:
package com.vrvwh.wh01.domain;import javax.persistence.*; import java.util.HashSet; import java.util.Set;/*** Created by Administrator on 2015/3/5.*/ @Entity public class Employee {private long id;private String name;private Set<Phone> phones=new HashSet<Phone>();@Id@GeneratedValue(strategy = GenerationType.IDENTITY)public long getId() {return id;}public void setId(long id) {this.id = id;}@Columnpublic String getName() {return name;}public void setName(String name) {this.name = name;} /**orphanRemoval=true配置表明删除无关联的数据。级联更新子结果集时此配置最关键 */@OneToMany(mappedBy = "employee",cascade = CascadeType.ALL,orphanRemoval = true)public Set<Phone> getPhones() {return phones;}public void setPhones(Set<Phone> phones) {this.phones = phones;} }
package com.vrvwh.wh01.domain;import javax.persistence.*;/*** Created by Administrator on 2015/3/5.*/ @Entity(name="Phones") public class Phone {@Idprivate int phoneId;private int phoneNumber;@ManyToOne(cascade= CascadeType.ALL)private Employee employee;public int getPhoneId() {return phoneId;}public void setPhoneId(int phoneId) {this.phoneId = phoneId;}public int getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(int phoneNumber) {this.phoneNumber = phoneNumber;}public Employee getEmployee() {return employee;}public void setEmployee(Employee employee) {this.employee = employee;}}
2、更新:
Employee employee=employeeService.query(1);employee.getPhones().clear();Phone phone1=new Phone();phone1.setPhoneNumber(132567);employee.getPhones().add(phone1);Phone phone2=new Phone();phone2.setPhoneNumber(132567);employee.getPhones().add(phone2);employeeService.update(employee);
JPA OneToMany级联更新 及 orphanRemoval = true 说明相关推荐
- Spring Data JPA OneToMany级联,多方删除修改新增详解(好文章!!申精!!)
前言 近期的项目中使用Spring Data JPA.JPA带来很大的便捷,但它内部映射关系及持久化机制如果理解不到位会出现很多问题.不同的配置将会产生不同的执行过程.如果不了解其运行机制,很容易在一 ...
- Spring Data JPA OneToMany注解参数orphanRemoval,一对多删除详解
博主:爱码叔 个人博客站点: icodebook 公众号:漫话软件设计 专注于软件设计与架构.技术管理.擅长用通俗易懂的语言讲解技术.对技术管理工作有自己的一定见解.文章会第一时间首发在个站上,欢迎大 ...
- JPA: Spring Data JPA @OneToMany 注解参数 orphanRemoval,一对多删除详解
分析了OneToMany级联操作多方的插入.更新.删除.我们得到如下结论: 1.插入,建议一方设置mappedBy,好处是只会执行一条insert语句.不会执行多余的update外键的sql. 2.更 ...
- jpa orphanRemoval = true的作用
这个注解表示是否删除孤立元素,例如映射关系是一对一,或一对多. 加上这个注解,即使不设置级联关系,删除一的时候,多的一方肯定是孤立元素了. 如代码: @OneToOne(mappedBy = &quo ...
- 关于hibernate注解方法中一对多的级联更新
最近做的项目中遇到很多各种表间关系是一对多对应的问题,开始自己弄的时候就去网上查,结果发现网上有关这方面的东西给的不是自己想要的,于是经过几天不停的更改测试终于算是勉强完成了级联更新的问题.在此把它记 ...
- JPA oneToMany
一对多模型(单向) 说明: 一个客户对应多个地址,通过客户可以获得该客户的多个地址的信息.客户和地址是一对多的关系,并且客户与地址是单向关联的关系. 映射策略 外键关联:两个表的关系定义在一个表中: ...
- JPA OneToMany删除子项须知
OneToMany,在One的Many集合里面移除某项时,DB不会删除对应项 例如:user -> orderList,在orderList中移除一项order时,DB层面不会删除对应order ...
- Access外键 级联更新、删除
工具栏-->"关系". 打开主表和从表. 将主表的字段拖动到从表的对应字段. (两个字段要求类型相同. 如果主表是自动编号,那么从表用长整型.) Access添加外键约束 ( ...
- Spring Data JPA 禁止自动更新
公司的项目后台架构是SpringBoot + Spring Date JPA,采用MySQL数据库.在工作刚开始时就遇到了一个奇怪的现象.在采用Date JPA查询完数据库之后,若改变了查询出的对象属 ...
最新文章
- VTK:图表之VisualizeDirectedGraph
- 充电原理_电动汽车充电桩如何设置?充电桩原理介绍
- java上下文即ServletContext
- 第三十六期:人工智能统计调查:86%的消费者更喜欢人工客服
- hadoop fs 命令详解
- php界面框架luy_LazyPHP
- 程序员的梗_程序员都背着大书包,里面到底装的什么?程序员们:钱、电脑.....
- 去除img未加载到的默认边框问题
- JSONHelper JSON帮助类
- discoverer初始化环境
- php 判断来源 微信客户端_常见WebShell客户端的流量特征及检测思路
- android界面编程内部类,Android精讲--界面编程1(界面编程与视图的组件)
- php链接mysql数据库 p_php连接mysql数据库的几种方法
- 【好用的Mac分屏软件】Magnet for Mac 2.3
- Folx Pro苹果BT磁力多线程下载工具
- Linux下libaio的一个简单例子
- mhw跳过结尾_怪物猎人世界怎么跳过剧情
- 抖音聊天”上线,字节最后的社交梦?
- Linux公社 学习连接
- Bootrap 项目实战(微金所前端首页)第一部分