前提:系统有学校-学生关系,学校可以包含多个学生,学生只能属于一个学校

在使用 spring-data-jpa 的时候,保存学校的同时保存学生信息,不需要先逐个保存学生信息,再将学生信息放在学校中保存学校

首先spring data jpa 配置需要设置数据库方言,否则回有外键不生效的

spring:
datasource:
url: jdbc:mysql://localhost:3306/iot?serverTimezone=GMT%2B8&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
jpa:
show-sql: true
hibernate:
ddl-auto: update
# 不增加出问题
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

学校信息:

@Entity(name = "t_school")
@Data
@ToString(exclude = "students")
public class School { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;

   //一对多
@OneToMany(fetch = FetchType.EAGER,mappedBy = "school",cascade = CascadeType.ALL)
private List<Student> students = new ArrayList<>(); public void addStudent(Student stu){
if(stu != null){
students.add(stu);
}
}
}

学生信息:

@Entity(name = "t_student")
@Data
@ToString(exclude = "school")
public class Student { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id; private String name;

  //多对一
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "school_id",nullable = false)
@JsonIgnore
@JsonIgnoreProperties
private School school;
}

测试、保存学校信息

@RestController
public class TestController { @Autowired
private SchoolRepository schoolRepository; @GetMapping("/save")
public void save(){
School school = new School();
school.setName("北京中学"); Student student = new Student();
student.setName("张三");
student.setSchool(school); Student student2 = new Student();
student2.setName("李四");
student2.setSchool(school); school.addStudent(student);
school.addStudent(student2); System.out.println(school); schoolRepository.saveAndFlush(school); }
}

在新建一方信息,将多方信息保存在一方的集合列表中,如果没有设置 一方的信息,将导致保存多方抱错,外键id 不能为 null

       student2.setSchool(school);

最后只需要保存一方信息,即可以将多方的信息一起保存

schoolRepository.saveAndFlush(school);

JPA 级联保存的问题的更多相关文章

  1. 【JPA 级联保存/级联删除】@OneToMany (双向) 一对多【转】

    [http://blog.sina.com.cn/s/blog_625d79410101dbdd.html]   看过前两篇帮助文档 [JPA] @OneToOne 单向 和 [JPA]@OneToO ...

  2. Hibernate入门(八)级联保存或更新(含问题在末尾,求大佬指点..)

    级联保存或更新CASCADE 级联保存或更新: 作用就是:保存一方的数据的时候,会把关联的对象也同时保存. 级联保存或更新的配置: 属性名:cascade 属性值: 1.none:所有情况下均不进行关 ...

  3. (原创)Hibernate 使用过程中(尤其是多对多关联中的级联保存和级联删除)的注意事项(基于项目的总结)

    一.先上知识点: 1.hibernate多对多关联关系中最重要的参数是(基于配置文件xxx.hbm.xml文件形式): 1):inverse属性,如果设置inverse=“true”就代表让对方参与维 ...

  4. Hibernate中表与表之间的关联多对多,级联保存,级联删除

    第一步:创建两个实体类:用户和角色实体类,多对多关系,并让两个实体类之间互相关联: 用户实体类: package com.yinfu.entity; import java.util.HashSet; ...

  5. Hibernate中表与表之间的关联一对多,级联保存和级联删除

    1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...

  6. Hibernate的级联保存、级联删除

    级联操作: 属性:cascade 值:save-update(级联保存) delete(级联删除) all(级联保存+级联删除) 优点:虽然,不用级联操作也能解决问题.但是级联操作可以减少代码量,使得 ...

  7. springboot jpa 批量保存数据--EntityManager和 JpaRepository

    1: 项目里面使用springboo-boot-start-data-jpa操作数据库,通过源码,在repository上继承JpaRepository 可以实现保存操作,其中源码接口为: <S ...

  8. JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用

    下面把项目中的用户类中有个:一对一  一对多  多对多的注解对应关系列取出来用于学习      说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...

  9. hibernate 一对多 级联 保存修改 删除

    一对多,一端设置: <set name="TWorkorderHistories" inverse="true" cascade="all&qu ...

随机推荐

  1. Lose it!

    You are given an array aa consisting of nn integers. Each aiai is one of the six following numbers:  ...

  2. windows系统安装 ionic

    windows系统安装 ionic 参考菜鸟教程:https://www.runoob.com/ionic/ionic-install.html 命令行安装 Window 和 Linux 上打开命令行 ...

  3. 【C语言】指针函数例子

    #include<stdio.h> char* getword(char); char* getword(char c) { switch (c) { case'A':return&quo ...

  4. Python记:通用的序列操作之成员资格(听起来倒是有些抽象的!)

    ______________________________永远守护这一尘不染的真心! 要检查特定的值是否包含在序列中,可使用运算符in.它检查是否满足指定的条件,并返回相应的值:满足时返回True, ...

  5. LabVIEW随笔2_毕业了

    08年研究生毕业了,在原来公司的兼职也结束了,开始真正的工作生涯了. 在此,非常感恩我的导师綦院长,体谅我的困楚之处,在我的研究生学习期间给予我的宽容和照顾.不料,2014年,恩师五十有余,却突然离世 ...

  6. python学习之 logging包

    1,logging包 python的一个包,专门用来写日志的. 官方一共划分了6个等级的log类型,分别对应重要性等级50,40,30,20,10,0: 级别排序:CRITICAL > ERRO ...

  7. import matplotlib.pyplot as plt出错

    >>>import matplotlib.pyplot as plt /usr/lib/python2.7/dist-packages/matplotlib/font_manager ...

  8. Codeforces Round #599 (Div. 2) C. Tile Painting

    Ujan has been lazy lately, but now has decided to bring his yard to good shape. First, he decided to ...

  9. 1.4 Eclipse 自动补全功能

    1.访问Content Assit 菜单项  window--preferences --Java---Editor--Content Assit 2. auto activation delay : ...

  10. python中字符串内置方法

    字符串类型 作用:定义姓名.性别等 定义方式: s='lzs' #\n换行 \t缩进4个空格 \r回退上一个打印结果,覆盖上一个打印结果 加上一个\让后面的\变得无意义 内置方法: (优先掌握) 1. ...