Cascade là gì?
Cascade là một tính năng tự động quản lý trạng thái của các đối tượng trong một mối quan hệ.
Bạn đang xem: Cascade là gì?
Ví dụ: có mối quan hệ sau đây giữa bảng Công ty và bảng Nhân viên:

Mối quan hệ giữa công ty và nhân viên là 1-n (một công ty có nhiều nhân viên).
Khi xóa hoặc cập nhật ID của một hàng trong bảng thực thể, các sự kiện sau sẽ xảy ra:
Trường hợp 1: KHÔNG CÓ NHÂN VIÊN THAM CHIẾU ĐẾN TỔ CHỨC ĐÓ (NO EMPLOYEES FOR THAT ORGANIZATION) -> XÓA/CẬP NHẬT BÌNH THƯỜNG.trường hợp 2: Tham chiếu nhân viên đã tồn tại cho công ty đó (công ty đã có nhân viên):2.1: Mặc định sẽ không chỉnh sửa, cập nhật vì sẽ ảnh hưởng đến nhân viên giới thiệu. (cập nhật/xóa = không có hành động, kiểm soát)2.2: company_id chỉ định nhân viên là null (đặt cập nhật/xóa = NULL)2.3: Sau khi cập nhật, đặt employee_id bằng id công ty (đối với trường hợp cập nhật). XÓA TẤT CẢ NHÂN VIÊN TRONG company_id THAM CHIẾU ĐẾN CÔNG TY ĐÃ XÓA (ĐANG CẬP NHẬT/XÓA = CASCADE)
Cascade là một tính năng trong 2.3. Khi một bản ghi thay đổi, nó sẽ tự động cập nhật các bản ghi tham chiếu đến nó.
Khi nào nên sử dụng lớp
Việc tự động cập nhật các bản ghi tham chiếu sẽ làm giảm hiệu suất, vì vậy điều này phụ thuộc vào trường hợp sử dụng của chúng tôi.
Ví dụ: logic thông thường nói rằng khi xóa một thực thể, trước tiên chúng tôi xóa tất cả nhân viên tham chiếu đến thực thể đó, sau đó xóa thực thể đó, thay vì xóa thực thể trước rồi sử dụng ngăn xếp để xóa các nhân viên tham chiếu đến thực thể đó. Kế tiếp.
Chúng tôi sử dụng phân lớp trong trường hợp dữ liệu tham chiếu bị hạn chế và dữ liệu tham chiếu chỉ có ý nghĩa khi được liên kết với một đối tượng tham chiếu.
Xem thêm: ” Hỏi kết nối quay số là gì và cách kết nối Internet bằng modem quay số
Ví dụ 1 người có nhiều tên (những tên này chỉ liên quan đến người đó) thì khi xóa người đó ta cũng xóa luôn các tên đó (vì giữ cũng không được) -> trường hợp nó dùng thác.
Sử dụng ngăn xếp trong Hibernate, JPA
Trong JPA: Hãy thực hiện cấu hình lớp trong chú thích
OneToMany(fetch = FetchType.LAZY, mappedBy = “Company”, Cascade = {CascadeType.PERSIST,CascadeType.REMOVE}) private Set listEmployee = new HashSet(); //… } Trong Hibernate: ta build bằng annotation
Cascade(value= {org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE}) private CollectionList worker = new HashSet(); //… } Nếu chúng ta muốn sử dụng cascade trong mọi trường hợp, cập nhật, xóa… chúng ta có thể sử dụng CascadeType.all
Các loại lớp
Các loại xếp tầng JPA (khi được sử dụng với EntityManagerFactory/EntityManager)
Tất cả | Tương ứng với tất cả các loại lớp. cascade={DTACH, HỢP NHẤT, TIẾP TỤC, LÀM MỚI, XÓA} |
Ngắt kết nối | Nếu đối tượng gốc bị tách rời khỏi ngữ cảnh lưu giữ lâu dài, thì các đối tượng tham chiếu đến nó cũng bị tách rời. |
hợp nhất | Khi đối tượng cha mẹ được hợp nhất vào ngữ cảnh lưu giữ lâu dài, các đối tượng tham chiếu đến nó cũng được hợp nhất. |
kiên trì | Nếu đối tượng cha mẹ được duy trì trong môi trường lưu giữ, thì các đối tượng tham chiếu đến nó cũng được lưu giữ. |
Cập nhật | Nếu đối tượng gốc được cập nhật trong ngữ cảnh lưu giữ lâu dài hiện tại, thì các đối tượng tham chiếu đến nó cũng được cập nhật. |
di dời | Khi đối tượng gốc bị xóa khỏi ngữ cảnh lưu giữ lâu dài, các đối tượng tham chiếu đến nó cũng bị xóa. |
Các loại lớp trong Hibernate (khi được sử dụng với SessionFactory/Session)
Cây rơm | Mô tả |
Tất cả | Liên quan đến lưu, xóa, cập nhật, đẩy ra, khóa, sao chép, hợp nhất, duy trì |
hủy hoại | |
DELETE_ORPHAN | Xóa trẻ mồ côi + tương ứng với xóa |
Đuổi | |
Khóa | |
hợp nhất | |
KHÔNG | |
kiên trì | |
Cập nhật | |
phản ánh | |
Cập nhật |
2 loại thác DELETE_ORPHANCE và EVICT không còn được sử dụng.