JPA oneToMany 级联更新

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;
    }

    @Column
    public 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 {
    @Id
    private 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);
时间: 2024-10-05 17:03:07

JPA oneToMany 级联更新的相关文章

记: Spring Data Jpa @OneToMany 级联查询被动触发的问题

I have encountered a bug in using Spring Data Jpa. Specifically,when @OneToMany was used to maintain a one-to-many relationship, lazy loading was effective.However,it may passively trigger the cascading query without using the cascading property. My

jpa @onetomany 级联查询时会有重复数据,去重问题

自己是直接查出来然后利用set去重(自己感觉不是太好,不过能达到目的) List<CampaignDashboardDimensionDo> list = query.getResultList();Set<CampaignDashboardDimensionDo> set=new HashSet<>(list);如有更好的方法,希望大佬留言,谢谢 原文地址:https://www.cnblogs.com/zqr99/p/9222239.html

数据库事务测试以及级联更新级联删除

数据库事务 start transaction; #开始事务 insert into gzb(gz)values(5000); insert into gzb(gz)values(6000); insert into gzb(gz)values(7000); insert into gzb(gz)values(8000); /*执行事务,并查看是否添加成功数据*/ commit; # commit数据,查看表中数据是否提交 rollback; #数据库回滚 级联更新,级联删除 主要通过两种方式

Oracle外键级联删除和级联更新

1 级联删除 Oracle在外键的删除上有NO ACTION(类似RESTRICT).CASCADE和SET NULL三种行为. 下面以学生-班级为例说明不同情况下的外键删除,学生属于班级,班级的主键是学生的外键. -- 班级表 CRATE TABLE TB_CLASS ( ID NUMBER NOT NULL, --班级主键 NAME VARCHAR2(50), --班级名称 CONSTRAINT PK_TB_CLASS PRIMARY KEY (ID) ); -- 学生表 CREATE TA

【Python】Django数据模型、级联删除、级联更新、ER图导出等

在本文中,我们将向读者详细介绍如何在更新和删除父表数据的同时,触发有关子表数据的级联更新和删除操作.您将看到当使用InnoDB表的时候,借助于外键约束就可以轻松搞定这一过程. 一.利用外键约束更新并删除MySQL中的数据 我们知道,开发能够维护多个表的完整性的数据库驱动的应用程序是一件非常复杂的事情--即使应用程序所面对的是当前最流行的开源关系型数据库管理系统MySQL服务器时也不例外.如果一个应用程序必须处理多个数据库表,而这些表之间有存在着某些预定义的关系,这时一旦父表中的数据被更新或者删除

mysql级联更新的两种方式:触发器更新和外键

1.mysql级联更新有两种方式:触发器更新和外键更新. 2.触发器更新和外键更新的目的都是为了保证数据完整性. 我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录. 举个例子: 现有2个实体- 麻将机 学生.课程,1种联系- 成绩 分别创建 学生表 students, 课程表course,成绩表score --创建 学生表 students CREATE TABLE IF NOT EXISTS `students` ( `id` int(11)

使用grails级联更新下拉列表

实现级联更新效果有多种方式,现只介绍用jquery框架的ajax技术实现的方式,个人认为使用jquery的方式更好更灵活,因为它只负责传数据,如果用grails自带的异步更新,简单的还可以,如果是复杂一点的就比较难搞. 下列代码无需考虑业务意义 jquery的ajax实现: 1.GSP中_form.gsp的简略代码: <div>     <g:select id="company" name="company.id" from="${co

Mysql实现级联操作(级联更新、级联删除)

一.首先创建两张表stu,sc create table stu( sid int UNSIGNED primary key auto_increment, name varchar(20) not null) TYPE=InnoDB charset=utf8; create table sc( scid int UNSIGNED primary key auto_increment, sid int UNSIGNED not null, score varchar(20) default '0

SQL 级联更新,级联删除的概念

SQL级联更新,级联删除 今天做了个测试,搞清楚了级联更新,级联删除级联删除:当我们没有对键加级联删除的时候,删除主键表中的数据(外键表有引用的数据)时,会报错,不能删除,必须先把相关联的外键数据            删除了,才能删除主键表的数据,但如果新建外键的时候设置了级联删除,那么当我们删除主键表的数据时,数据库就会自动帮我们把相            关联的外键表数据删除掉,这个好理解级联更新:一直困扰我,级联更新有什么用,是更新什么东西呢,今天做了个测试(mssql),终于搞清楚了一