cascade級聯(lián)關(guān)系操作案例詳解
屬性
CascadeType.REFRESH
:級聯(lián)刷新,當(dāng)多個用戶同時作操作一個實體,為了用戶取到的數(shù)據(jù)是實時的,在用實體中的數(shù)據(jù)之前就可以調(diào)用一下refresh()方法CascadeType.REMOVE
:級聯(lián)刪除,當(dāng)調(diào)用remove()方法刪除Order實體時會先級聯(lián)刪除OrderItem的相關(guān)數(shù)據(jù)CascadeType.MERGE
:級聯(lián)更新,當(dāng)調(diào)用了Merge()方法,如果Order中的數(shù)據(jù)改變了會相應(yīng)的更新OrderItem中的數(shù)據(jù)CascadeType.PERSIST
:級聯(lián)保存,當(dāng)調(diào)用了Persist() 方法,會級聯(lián)保存相應(yīng)的數(shù)據(jù)CascadeType.DETACH
:級聯(lián)脫管/游離操作,如果你要刪除一個實體,但是它有外鍵無法刪除,你就需要這個級聯(lián)權(quán)限了。它會撤銷所有相關(guān)的外鍵關(guān)聯(lián)。
CascadeType.ALL
:包含以上所有級聯(lián)屬性
級聯(lián)保存,級聯(lián)修改,級聯(lián)刪除案例
//學(xué)校類 @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<>(); //手動構(gòu)造添加學(xué)生的方法 public void addStudent(Student stu){ if(!students.contains(stu)){ stu.setSchool(this); //設(shè)置學(xué)校 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); } } //學(xué)生類 @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("學(xué)校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); //經(jīng)過測試,用save方法也是可以的 schoolDao.saveAndFlush(school); //這個方法dao類需要去繼承JpaRepository } @Test public void testDel() { schoolDao.deleteById(1365157538168864L); } /** * 級聯(lián)更新 */ @Test public void testMerge(){ Optional<School> rs = schoolDao.findById(1365164498616352L); School school = rs.isPresent()? rs.get() : null; if(school != null){ school.setName("學(xué)校2"); List<Student> students = school.getStudents(); if(students != null && students.size() > 0){ for (Student student : students) { student.setName("改名字"); } } school.setStudents(students); schoolDao.save(school); } } } 經(jīng)過測試,在保存school的時候會一起把student一起保存,級聯(lián)保存 刪除學(xué)校會把級聯(lián)的student一起刪除 級聯(lián)更新 `cascade`屬性加上`CascadeType.MERGE`,注意:不能和懶加載一起使用,正確加載方式:fetch = FetchType.EAGER
到此這篇關(guān)于cascade級聯(lián)關(guān)系的文章就介紹到這了,更多相關(guān)cascade級聯(lián)關(guān)系內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用hutool工具進行導(dǎo)入導(dǎo)出excel表格
如何在后臺添加導(dǎo)入導(dǎo)出表格的功能呢,本期的文章將會帶領(lǐng)小伙伴們一起實現(xiàn)此功能,文中有詳細(xì)的代碼示例和圖文介紹,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-10-10Windows中在IDEA上安裝和使用JetBrains Mono字體的教程
這篇文章主要介紹了Windows IDEA上安裝和使用JetBrains Mono字體的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03spring mvc實現(xiàn)文件上傳并攜帶其他參數(shù)的示例
本篇文章主要介紹了spring mvc實現(xiàn)文件上傳并攜帶其他參數(shù)的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02springBoot配置國產(chǎn)達夢數(shù)據(jù)庫的示例詳解
本文向大家介紹springBoot?配置國產(chǎn)達夢數(shù)據(jù)庫的相關(guān)知識,文章結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04Java原生服務(wù)器接收上傳文件 不使用MultipartFile類
這篇文章主要為大家詳細(xì)介紹了Java原生服務(wù)器接收上傳文件,不使用MultipartFile類,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09Maven中optional和scope元素的使用弄明白了嗎
這篇文章主要介紹了Maven中optional和scope元素的使用弄明白了嗎,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12SSM如何實現(xiàn)在Controller中添加事務(wù)管理
這篇文章主要介紹了SSM如何實現(xiàn)在Controller中添加事務(wù)管理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02