Apa arti REFRESH dan MERGE dalam hal database?

94

Saya penasaran dan perlu menemukan jawaban ini dengan cepat. Google tidak akan banyak membantu.

Java Persistence API memiliki properti berikut yang memberi tahu framework untuk menurunkan operasi pada entitas terkait:

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

Saya tahu apa arti dua yang pertama: saat saya mempertahankan objek A yang memiliki B, pertahankan B juga, dan saat saya menghapus A, hapus B juga.

Tapi aku tidak bisa memahami apa yang dicapai dua orang lainnya. Tolong?

André Chalella
sumber

Jawaban:

80

REFRESH berarti "menarik semua perubahan status dari database ke representasi saya". Cascading ini sederhana; itu berarti bahwa semua entitas terkait disegarkan.

MERGE berarti sesuatu yang kompleks yang mendekati "simpan" tetapi lebih seperti "dorong entitas yang terpisah ini kembali ke status terkelola dan simpan perubahan statusnya"; cascading berarti bahwa semua entitas terkait didorong mundur dengan cara yang sama, dan pegangan entitas terkelola yang Anda dapatkan kembali .merge()memiliki semua entitas terkelola yang terkait dengannya.

Tautkan ke salah satu contoh dokumen yang relevan

kekacauan
sumber
1
Apa defaultnya (jika kita tidak menyetel CascadeType), dan apa yang paling masuk akal / umum untuk disetel?
Rosdi Kasim
@Rosdi Kasim: Defaultnya CascadeTypeadalah larik kosong.
pengguna1438038
@chaos jadi segarkan perbarui anak-anak agar sesuai dengan apa yang ada di database saat induk diperbarui / disegarkan. Merge pada dasarnya akan menimpa bidang yang diperbarui pada anak-anak dalam database untuk mencerminkan entitas anak dengan induknya. Jadi jika keduanya digunakan, apa yang terjadi? Saya membayangkan saya telah salah memahami ini.
Jordan Mackie
87

Arti Anotasi JPA untuk Banyak ke Banyak hubungan :

  • SEMUA - semua operasi cascading yang mungkin dilakukan pada entitas sumber di-cascade ke target pengaitan.
  • GABUNG - jika entitas sumber digabungkan, penggabungan dialirkan ke target asosiasi.
  • PERSIST - jika entitas sumber dipertahankan, persist tersebut diturunkan ke target asosiasi.
  • REFRESH - jika entitas sumber di-refresh, refresh mengalir ke target asosiasi.
  • HAPUS - jika entitas sumber dihapus, target asosiasi juga dihapus.

Saya sendiri melihatnya seperti ini (lebih mudah dibaca):

  • MERGE - untuk objek yang sudah ada, untuk menggabungkan data yang ada di tabel dengan data di objek saya. (sinkronkan ke database)
  • PERSIST - membuat record baru dari objek dalam database.
  • REFRESH - menyegarkan data di objek. Mungkin ada perubahan pada database yang perlu disinkronkan. (sinkronkan dari database)
  • HAPUS - adalah, baik, hapus.
cgp
sumber
1
Javadoc untuk anotasi tidak menjelaskan apa pun bagi saya. Terima kasih atas jawabannya!
André Chalella