Hibernate menggunakan strategi kitaran hayat yang berbeza untuk mengendalikan objek yang berkaitan berdasarkan jenis perkaitan. Strategi ini termasuk lata sehala satu-ke-banyak, lata dua hala satu-ke-banyak, pemadaman banyak-dengan-satu anak yatim, lata dua hala satu-ke-satu, dsb. Dalam aplikasi praktikal, anda boleh memilih strategi yang sesuai mengikut keperluan anda Contohnya, pemadaman lata memastikan semua entiti anak yang berkaitan dipadamkan pada masa yang sama apabila entiti induk dipadamkan. Selain itu, Hibernate juga menyediakan pilihan konfigurasi pemetaan yang kaya, seperti orphanRemoval dan mappedBy, untuk menyesuaikan lagi pemprosesan objek yang berkaitan.
Cara Hibernate mengendalikan kitaran hayat objek berkaitan
Hibernate ialah rangka kerja pemetaan objek-hubungan (ORM) Java yang popular yang memetakan objek Java secara automatik ke jadual pangkalan data hubungan. Apabila berurusan dengan objek berkaitan, Hibernate menggunakan strategi kitaran hayat yang berbeza berdasarkan jenis perhubungan yang berbeza.
Jenis perhubungan
Dalam Hibernate, jenis perhubungan biasa termasuk:
-
Sehala satu-ke-banyak: Satu entiti merujuk kepada berbilang entiti.
-
Dwiarah satu-ke-banyak: Satu entiti merujuk kepada berbilang entiti dan dirujuk oleh berbilang entiti pada masa yang sama.
-
Many-to-One: Berbilang entiti merujuk kepada satu entiti.
-
Dwiarah satu dengan satu: Entiti merujuk kepada entiti dan dirujuk oleh entiti pada masa yang sama.
Strategi Kitar Hayat
Hibernate menyediakan pelbagai strategi kitaran hayat untuk mengendalikan kitaran hayat objek yang berkaitan. Setiap dasar mempunyai gelagat tersendiri, bergantung pada jenis perkaitan dan konfigurasi pemetaan.
Sehala satu-ke-banyak
-
Pemadaman bertingkat: Apabila entiti induk dipadamkan, strategi pemadaman berlatarkan akan memadamkan semua entiti anak yang berkaitan secara automatik.
-
Kegigihan bertingkat: Apabila entiti induk dikekalkan, strategi ketekunan bertingkat secara automatik mengekalkan semua entiti anak yang berkaitan.
-
Cascade Cantuman: Apabila entiti induk digabungkan, strategi cantuman lata secara automatik menggabungkan semua entiti anak yang berkaitan.
-
Muat Semula Bertingkat: Apabila entiti induk dimuat semula, strategi muat semula bertingkat secara automatik menyegarkan semua entiti anak yang berkaitan.
-
Lata detasmen: Strategi Lata detasmen tidak akan melancarkan sebarang operasi kepada entiti anak yang berkaitan.
Dua hala satu-ke-banyak
-
Lata dua hala: Strategi ini serupa dengan lata sehala, tetapi ia melancarkan operasi dalam entiti induk dan anak.
-
Lata koleksi: Strategi ini hanya melancarkan operasi dalam koleksi entiti kanak-kanak dan tidak mengalir kepada entiti induk.
-
Lata pemetaan: Strategi ini hanya melancarkan operasi dalam pemetaan entiti induk, bukan kepada koleksi entiti anak.
Many-to-One
-
Pemadaman Anak Yatim: Dasar pemadaman anak yatim secara automatik memadamkan entiti anak apabila ia tidak lagi dirujuk oleh mana-mana entiti induk.
-
Penguatkuasaan Kunci Asing FK: Apabila entiti induk dipadamkan, dasar ini akan menetapkan kunci asing entiti anak kepada
NULL
tanpa memadamkan entiti anak secara automatik. NULL
,而不会自动删除子实体。
-
FK 外键取消: 当父实体被删除时,该策略会将子实体的外键设置为
NULL
Pembatalan Kunci Asing FK:
Apabila entiti induk dipadamkan, strategi ini akan menetapkan kunci asing entiti anak kepada NULL
dan juga memadamkan entiti anak secara automatik.
Dua hala satu lawan satu
- Lata: Strategi ini serupa dengan strategi dua hala satu lawan banyak.
Lata Utama:
Strategi ini hanya melata operasi dalam entiti utama, bukan kepada entiti yang berkaitan.
Kes praktikal
Pemadaman berlata sehala satu-ke-banyak
@Entity
public class Parent {
@Id
private Long id;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
private List<Child> children;
// ...
}
@Entity
public class Child {
@Id
private Long id;
@ManyToOne
private Parent parent;
// ...
}
Salin selepas log masuk
Dalam contoh ini, jika kita memadamkan entiti induk, semua entiti anak yang berkaitan juga akan dipadamkan secara automatik. Lata dwiarah satu-ke-banyak dwiarah
🎜
@Entity
public class Parent {
@Id
private Long id;
@OneToMany(mappedBy = "parent")
private List<Child> children;
// ...
}
@Entity
public class Child {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "parent_id", nullable = false)
private Parent parent;
// ...
}
Salin selepas log masuk
🎜 Dalam contoh ini, jika kita mengemas kini entiti induk atau memadamkan entiti anak, hujung persatuan yang satu lagi akan terjejas. 🎜
Atas ialah kandungan terperinci Bagaimanakah Hibernate mengendalikan kitaran hayat objek yang berkaitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!