Cascade là gì

  -  

Cascade là gì?

Cascade là một tính năng giúp làm chủ trạng thái của các đối tượng trong một quan hệ một giải pháp tự động.

Bạn đang xem: Cascade là gì

Ví dụ ta có quan hệ giữa bảng company cùng bảng employee như sau:

*

Mối dục tình giữa company và employee là 1-n (một company đựng được nhiều employee).

Khi xóa hoặc update id của một row trong table company sẽ có được các trường đúng theo sau:

Trường phù hợp 1: chưa tồn tại employee như thế nào tham chiếu cho tới company đó (company đó chưa xuất hiện employee nào) -> xóa / update bình thường.Trường hợp 2: đã gồm employee tham chiếu tới company đó (company này đã có employee):2.1: mặc định sẽ không tồn tại sửa, update vị nó sẽ ảnh hưởng tới những employee vẫn tham chiếu tới. (ON UPDATE/DELETE = NO ACTION, RESTRICT)2.2: phối company_id của những employee vẫn tham chiếu tới bằng null (ON UPDATE/ON DELETE = set NULL) (Tạm hiểu là doanh nghiệp bị xóa, biến đổi thì các nhân viên sẽ không còn thuộc công ty nào cả)2.3: phối company_id của các employee bằng id của company sau khoản thời gian update (cho trường đúng theo update) . Cùng xóa tất cả các employee gồm company_id tham chiếu cho tới company bị xóa (ON UPDATE/ON DELETE = CASCADE)

Cascade chính là tính năng vào trường thích hợp 2.3. Lúc một bạn dạng ghi thay đổi thì nó sẽ tự động update các phiên bản ghi đã tham chiếu tới nó.

Khi như thế nào nên thực hiện cascade

Lưu ý rằng chính việc tự động hóa update các phiên bản ghi sẽ tham chiếu tới khiến cho hiệu năng bị sút xuống cho nên vì vậy tùy trường hợp nhưng ta áp dụng nó.

Ví dụ theo xúc tích thông thường, khi xóa 1 company thì ta đã xóa toàn bộ các employee đang tham chiếu cho tới nó trước rồi sau đấy bắt đầu xóa company kia chứ không tiến hành xóa company trước rồi áp dụng cascade để xóa các employee sẽ tham chiếu tới.

Ta sẽ áp dụng cascade trong những trường hợp tài liệu tham chiếu ít, các dữ liệu tham chiếu chỉ có ý nghĩa sâu sắc khi nối sát với đối tượng người dùng tham chiếu.

Xem thêm: Verbal Communication Là Gì, Sự Khác Biệt Giữa Giao Tiếp Bằng Lời Và Không Lời

Ví dụ một người có không ít tên (các tên đó chỉ gắn với người đó), thì khi xóa người đó đi thì ta đang xóa luôn luôn các tên kia (vì nếu bảo quản nó sẽ không có tính năng gì cả) -> trường đúng theo này sử dụng cascade.

Sử dụng cascade trong Hibernate, JPA

Trong JPA: ta đang thực hiện cấu hình cascade trong annotation
OneToMany(fetch = FetchType.LAZY, mappedBy = "company", cascade = CascadeType.PERSIST,CascadeType.REMOVE) private mix listEmployee = new HashSet(); //... }Trong Hibernate: ta sẽ thông số kỹ thuật bằng annotation
Cascade(value= org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE) private phối listEmployee = new HashSet(); //... }Nếu mong mỏi dùng cascade trong toàn bộ các trường hợp, update, delete… ta hoàn toàn có thể dùng CascadeType.ALL

Các loại Cascade

Các các loại cascade vào JPA (khi sử dụng với EntityManagerFactory/EntityManager)

CascadeMôt tả
ALLTương ứng với tất cả các một số loại cascade. cascade=DETACH, MERGE, PERSIST, REFRESH, REMOVE
DETACHNếu đối tượng phụ vương bị detached ngoài persistence context thì các đối tượng người dùng tham chiếu cho tới nó cũng trở thành detached.
MERGENếu đối tượng cha được merged vào persistence context, thì các đối tượng người dùng tham chiếu tới nó cũng rất được merged.
PERSISTNếu đối tượng phụ vương được persisted vào persistence context, thì các đối tượng người sử dụng tham chiếu cho tới nó cũng được persisted.
REFRESHNếu đối tượng phụ vương được refreshed nghỉ ngơi persistence context hiện tại, thì các đối tượng người tiêu dùng tham chiếu cho tới nó cũng khá được refreshed.
REMOVENếu đối tượng cha bị removed ngoài persistence context, thì các đối tượng người dùng tham chiếu cho tới nó cũng rất được removed.

Xem thêm: Top 9 Bài Nghị Luận Về Hiện Tượng Nghiện Game Của Học Sinh Nghiện Game Online

Các một số loại cascade trong Hibernate (khi thực hiện với SessionFactory/Session)

CascadeMô tả
ALLTương ứng với save, delete, update, evict, lock, replicate, merge, persist
DELETE
DELETE_ORPHANTương ứng với delete + delete orphans
EVICT
LOCK
MERGE
NONE
PERSIST
REFRESH
REPLICATE
UPDATE

Trong đó 2 loại cascadeType là DELETE_ORPHANCE với EVICT đã hết được sử dụng.