CascadeType.REFRESH thực sự làm gì?


81

Những gì CascadeType.REFRESHthực sự làm gì?

Định nghĩa cho nó là

Khi chúng tôi làm mới một thực thể, tất cả các thực thể được giữ trong trường này cũng sẽ làm mới

nhưng điều này có nghĩa gì trong thực tế? Ai đó có thể vui lòng cho tôi một ví dụ đơn giản?

Câu trả lời:


117

Các mô tả CascadeType riêng lẻ có thể hơi khó hiểu, nhưng có một cách dễ dàng để tìm ra nó từ trường hợp chung.

Đối với bất kỳ CascadeTypegiá trị nào, điều đó có nghĩa là nếu thao tác Xđược gọi trên một cá thể sử dụng EntityManagergiao diện và cá thể đó có tham chiếu đến các cá thể thực thể khác và liên kết đó đã CascadeType.Xđược xác định, thì EntityManagerthao tác cũng sẽ được áp dụng cho thực thể được liên kết đó.

Vì vậy, EntityManager.refresh()được định nghĩa là:

Làm mới trạng thái của cá thể từ cơ sở dữ liệu, ghi đè các thay đổi được thực hiện đối với thực thể, nếu có.

Vì vậy, nếu thực thể A có một tham chiếu đến thực thể B và tham chiếu đó được chú thích bằng @CascadeType.REFRESH, và EntityManager.refresh(A)được gọi, thì EntityManager.refresh(B)nó cũng được gọi ngầm.


Tôi biết đây là một bài đăng cũ, nhưng sử dụng ví dụ của bạn về A và B ở trên, nếu phiên bản B hiện đang được tách ra, liệu một CascadeType.PERSIST có khiến B trở nên dai dẳng không? Tôi đang sử dụng triển khai JPA của Hibernate.
Andy

4
Đã trả lời câu hỏi của riêng tôi. Câu trả lời là không. Bạn phải gọi lưu trên đối tượng để nó trở nên bền bỉ.
Andy

Điều gì sẽ xảy ra nếu tôi hợp nhất một đối tượng đang ở trạng thái liên tục?
abhijeet pathak

9

Truy xuất bằng cách làm mới: Các đối tượng được quản lý có thể được tải lại từ cơ sở dữ liệu bằng cách sử dụng phương thức làm mới:

Nội dung của đối tượng được quản lý trong bộ nhớ bị loại bỏ (bao gồm các thay đổi, nếu có) và được thay thế bằng dữ liệu được truy xuất từ ​​cơ sở dữ liệu. Điều này có thể hữu ích để đảm bảo rằng ứng dụng xử lý phiên bản cập nhật nhất của một đối tượng thực thể, đề phòng trường hợp nó có thể đã bị một EntityManager khác thay đổi kể từ khi nó được truy xuất.

Nguồn: http://www.objectdb.com/java/jpa/persistence/retrieve

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.