文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

cascade级联关系操作案例详解

2024-04-02 19:55

关注

属性

CascadeType.ALL:包含以上所有级联属性

级联保存,级联修改,级联删除案例

//学校类
@Table(name = "t_school")
@Entity
@Getter
@Setter
public class School extends BaseEntity {
    private String name;
    @JsonIgnore
    @OneToMany(mappedBy = "school", cascade = {CascadeType.REFRESH, CascadeType.REMOVE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
    private List<Student> students = new ArrayList<>();
    //手动构造添加学生的方法
    public void addStudent(Student stu){
        if(!students.contains(stu)){
            stu.setSchool(this);    //设置学校
            this.students.add(stu);    //添加
        }
    }
    //重写equals和hashCode方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        School school = (School) o;
        return Objects.equals(name, school.name) &&
                Objects.equals(students, school.students);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, students);
    }
}
//学生类
@Table(name = "t_student")
@Entity
@Getter
@Setter
public class Student extends BaseEntity {
    private String name;
    private String age;
    @ManyToOne(cascade = CascadeType.REFRESH,optional = false)
    @JoinColumn(name = "SCHOOL_ID")
    private School school;
}
//测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class SchoolDaoTest {
    @Autowired
    private SchoolDao schoolDao;
    @PersistenceContext
    private EntityManager em;
    @Test
    public void testSave() {
        School school = new School();
        school.setName("学校1");
        Student student1 = new Student();
        student1.setAge("18");
        student1.setName("张三");
        Student student2 = new Student();
        student2.setAge("18");
        student2.setName("李四");
        school.addStudent(student1);
        school.addStudent(student2);
        //经过测试,用save方法也是可以的
        schoolDao.saveAndFlush(school);        //这个方法dao类需要去继承JpaRepository
    }
    @Test
    public void testDel() {
        schoolDao.deleteById(1365157538168864L);
    }
  
  @Test
  public void testMerge(){
      Optional<School> rs = schoolDao.findById(1365164498616352L);
      School school = rs.isPresent()? rs.get() : null;
      if(school != null){
          school.setName("学校2");
          List<Student> students = school.getStudents();
          if(students != null && students.size() > 0){
              for (Student student : students) {
                  student.setName("改名字");
              }
          }
          school.setStudents(students);
          schoolDao.save(school);
      }
  }
} 
经过测试,在保存school的时候会一起把student一起保存,级联保存 删除学校会把级联的student一起删除
级联更新
`cascade`属性加上`CascadeType.MERGE`,注意:不能和懒加载一起使用,正确加载方式:fetch = FetchType.EAGER

到此这篇关于cascade级联关系的文章就介绍到这了,更多相关cascade级联关系内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯