中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

cascade級聯關系操作實例分析

發布時間:2022-07-19 17:26:09 來源:億速云 閱讀:369 作者:iii 欄目:開發技術

今天小編給大家分享一下cascade級聯關系操作實例分析的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

屬性

  • CascadeType.REFRESH:級聯刷新,當多個用戶同時作操作一個實體,為了用戶取到的數據是實時的,在用實體中的數據之前就可以調用一下refresh()方法

  • CascadeType.REMOVE:級聯刪除,當調用remove()方法刪除Order實體時會先級聯刪除OrderItem的相關數據

  • CascadeType.MERGE:級聯更新,當調用了Merge()方法,如果Order中的數據改變了會相應的更新OrderItem中的數據

  • CascadeType.PERSIST:級聯保存,當調用了Persist() 方法,會級聯保存相應的數據

  • CascadeType.DETACH:級聯脫管/游離操作,如果你要刪除一個實體,但是它有外鍵無法刪除,你就需要這個級聯權限了。它會撤銷所有相關的外鍵關聯。

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級聯關系操作實例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜平县| 永州市| 沈阳市| 田阳县| 蒙山县| 汉川市| 平潭县| 保定市| 信宜市| 大安市| 长泰县| 堆龙德庆县| 伊宁县| 呼伦贝尔市| 乌海市| 青州市| 珠海市| 巴青县| 宁武县| 清水河县| 垫江县| 峨眉山市| 离岛区| 阿坝| 巴中市| 南溪县| 弥勒县| 揭东县| 旺苍县| 无棣县| 内乡县| 乌拉特中旗| 平谷区| 康定县| 荆州市| 南涧| 浠水县| 五常市| 峨山| 漳平市| 哈巴河县|