REFRESH và MERGE có nghĩa là gì về mặt cơ sở dữ liệu?


94

Tôi tò mò và cần tìm câu trả lời này nhanh chóng. Google sẽ không giúp được gì nhiều.

API Java Persistence có các thuộc tính này cho biết khung công tác phân tầng các hoạt động trên các thực thể được liên kết:

CascadeType.PERSIST
CascadeType.DELETE
CascadeType.MERGE
CascadeType.REFRESH

Tôi biết hai điều đầu tiên có nghĩa là gì: khi tôi duy trì đối tượng A có B, cũng giữ nguyên B, và khi tôi xóa A, cũng xóa B.

Nhưng tôi không thể hiểu được những gì hai người kia đạt được. Cứu giúp?

Câu trả lời:


80

REFRESH có nghĩa là "kéo bất kỳ thay đổi trạng thái nào từ cơ sở dữ liệu vào biểu diễn của tôi". Xếp tầng điều này rất đơn giản; nó có nghĩa là tất cả các thực thể liên quan được làm mới.

MERGE có nghĩa là một cái gì đó phức tạp gần đúng với "lưu" nhưng giống như "đẩy thực thể tách rời này trở lại trạng thái được quản lý và lưu các thay đổi trạng thái của nó"; phân tầng có nghĩa là tất cả các thực thể được liên kết bị đẩy lùi theo cùng một cách và xử lý thực thể được quản lý mà bạn lấy lại từ đó .merge()có tất cả các thực thể được quản lý được liên kết với nó.

Liên kết đến một phiên bản của các tài liệu liên quan


1
Mặc định là gì (nếu chúng tôi không đặt bất kỳ CascadeType nào) và cách hợp lý / phổ biến nhất để đặt là gì?
Rosdi Kasim

@Rosdi Kasim: Giá trị CascadeTypemặc định là một mảng trống.
user1438038

@chaos so refresh cập nhật phần con để khớp với những gì trong cơ sở dữ liệu khi phần cha được cập nhật / làm mới. Merge về cơ bản sẽ ghi đè các trường được cập nhật trong các trường con trong cơ sở dữ liệu để phản ánh các thực thể con với cha mẹ. Vì vậy, nếu cả hai được sử dụng, điều gì sẽ xảy ra? Tôi tưởng tượng tôi đã hiểu sai điều này.
Jordan Mackie

87

Chú thích JPA Ý nghĩa cho nhiều mối quan hệ :

  • TẤT CẢ - tất cả các hoạt động xếp tầng có thể thực hiện trên thực thể nguồn đều được xếp tầng tới đích của liên kết.
  • MERGE - nếu thực thể nguồn được hợp nhất, quá trình hợp nhất sẽ được xếp tầng tới đích của liên kết.
  • PERSIST - nếu thực thể nguồn vẫn tồn tại, thì thực thể tồn tại sẽ được chuyển sang mục tiêu của liên kết.
  • REFRESH - nếu thực thể nguồn được làm mới, quá trình làm mới sẽ được chuyển theo tầng tới đích của liên kết.
  • XÓA - nếu thực thể nguồn bị xóa, mục tiêu của liên kết cũng bị xóa.

Bản thân tôi thấy chúng theo cách này (dễ đọc hơn):

  • MERGE - cho các đối tượng hiện có, để hợp nhất dữ liệu hiện có trong bảng với dữ liệu trong đối tượng của tôi. (đồng bộ với cơ sở dữ liệu)
  • PERSIST - là tạo bản ghi mới từ đối tượng trong cơ sở dữ liệu.
  • REFRESH - là làm mới dữ liệu trong đối tượng. Có lẽ đã có sự thay đổi trên cơ sở dữ liệu cần được đồng bộ hóa. (đồng bộ từ cơ sở dữ liệu)
  • BỎ - là, tốt, xóa.

1
Javadoc cho các chú thích không giải thích được gì cho tôi. Cảm ơn vì câu trả lời!
André Chalella
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.