REFRESH และ MERGE หมายถึงอะไรในแง่ของฐานข้อมูล?


94

ฉันสงสัยและต้องการหาคำตอบนี้โดยด่วน Google จะไม่ช่วยอะไรมาก

Java Persistence API มีคุณสมบัติเหล่านี้ที่บอกกรอบงานเพื่อเรียงลำดับการดำเนินการบนเอนทิตีที่เกี่ยวข้อง:

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

ฉันรู้ว่าสองตัวแรกหมายถึงอะไร: เมื่อฉันยังคงวัตถุ A ซึ่งมี B ก็ยังคงมี B เช่นกันและเมื่อฉันลบ A ให้ลบ B ด้วย

แต่ฉันไม่สามารถเข้าใจได้ว่าอีกสองคนทำอะไรสำเร็จ ช่วยด้วย?

คำตอบ:


80

REFRESH หมายถึง "ดึงการเปลี่ยนแปลงสถานะจากฐานข้อมูลมาเป็นตัวแทนของฉัน" การเรียงซ้อนเป็นเรื่องง่าย หมายความว่าเอนทิตีที่เกี่ยวข้องทั้งหมดได้รับการรีเฟรช

MERGE หมายถึงสิ่งที่ซับซ้อนซึ่งใกล้เคียงกับ "บันทึก" แต่เหมือนกับ "ผลักเอนทิตีแยกนี้กลับเข้าสู่สถานะที่มีการจัดการและบันทึกการเปลี่ยนแปลงสถานะ" การเรียงซ้อนหมายความว่าเอนทิตีที่เกี่ยวข้องทั้งหมดได้รับการผลักกลับในลักษณะเดียวกันและตัวจัดการเอนทิตีที่มีการจัดการที่คุณได้รับกลับมา.merge()มีเอนทิตีที่มีการจัดการทั้งหมดที่เชื่อมโยงกับเอนทิตี

เชื่อมโยงไปยังอินสแตนซ์ของเอกสารที่เกี่ยวข้อง


1
ค่าเริ่มต้นคืออะไร (หากเราไม่ได้ตั้งค่า CascadeType ใด ๆ ) และอะไรคือสิ่งที่เหมาะสมที่สุด / ทั่วไปในการตั้งค่า?
Rosdi Kasim

@Rosdi Kasim: CascadeTypeค่าเริ่มต้นเป็นอาร์เรย์ว่าง
user1438038

@chaos ดังนั้นการรีเฟรชจะอัปเดตเด็กให้ตรงกับสิ่งที่อยู่ในฐานข้อมูลเมื่อผู้ปกครองได้รับการอัปเดต / รีเฟรช การผสานจะเขียนทับฟิลด์ที่อัปเดตในชายด์ในฐานข้อมูลเป็นหลักเพื่อสะท้อนเอนทิตีลูกกับพาเรนต์ แล้วถ้าใช้ทั้งสองอย่างจะเกิดอะไรขึ้น? ฉันคิดว่าฉันเข้าใจผิด
Jordan Mackie

89

คำอธิบายประกอบ JPA มีความหมายสำหรับความสัมพันธ์แบบหลายคนถึงมาก :

  • ทั้งหมด - การดำเนินการเรียงซ้อนที่เป็นไปได้ทั้งหมดที่ดำเนินการบนเอนทิตีต้นทางจะเรียงซ้อนกันไปยังเป้าหมายของการเชื่อมโยง
  • ผสาน - หากผสานเอนทิตีต้นทางการผสานจะเรียงซ้อนกันไปยังเป้าหมายของการเชื่อมโยง
  • PERSIST - ถ้าเอนทิตีต้นทางยังคงอยู่ค่าคงที่จะเรียงซ้อนไปยังเป้าหมายของการเชื่อมโยง
  • REFRESH - หากรีเฟรชเอนทิตีต้นทางการรีเฟรชจะเรียงซ้อนไปยังเป้าหมายของการเชื่อมโยง
  • ลบ - ถ้าเอนทิตีต้นทางถูกลบออกเป้าหมายของการเชื่อมโยงจะถูกลบออกด้วย

ฉันเห็นพวกเขาด้วยวิธีนี้ (อ่านเพิ่มเติม):

  • ผสาน - สำหรับวัตถุที่มีอยู่เพื่อรวมข้อมูลที่มีอยู่ในตารางกับข้อมูลในวัตถุของฉัน (ซิงค์กับฐานข้อมูล)
  • PERSIST - สร้างระเบียนใหม่จากวัตถุในฐานข้อมูล
  • REFRESH - คือการรีเฟรชข้อมูลในวัตถุ บางทีอาจมีการเปลี่ยนแปลงในฐานข้อมูลซึ่งจำเป็นต้องซิงค์ (ซิงค์จากฐานข้อมูล)
  • ลบ - คือดีลบ

1
Javadoc สำหรับคำอธิบายประกอบไม่ได้เคลียร์อะไรให้ฉัน ขอบคุณสำหรับคำตอบ!
André Chalella
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.