Rumah  >  Artikel  >  Java  >  Bagaimanakah Hibernate melaksanakan pemetaan polimorfik?

Bagaimanakah Hibernate melaksanakan pemetaan polimorfik?

王林
王林asal
2024-04-17 12:09:01476semak imbas

Pemetaan polimorfik hibernate boleh memetakan kelas yang diwarisi ke pangkalan data, menyediakan jenis pemetaan berikut: subkelas bercantum: Buat jadual berasingan untuk subkelas, termasuk semua lajur kelas induk. table-per-class: Cipta jadual berasingan untuk subkelas, yang mengandungi hanya lajur khusus subkelas. union-subclass: Serupa dengan joined-subclass, tetapi jadual kelas induk menyertai semua lajur subclass.

Hibernate 如何实现多态映射?

Pemetaan Polimorfik Hibernate: Analisis Mendalam

Pengenalan
Dalam pengaturcaraan berorientasikan objek, anda biasanya menghadapi situasi di mana anda perlu memetakan kelas yang diwarisi ke pangkalan data. Hibernate boleh mencapai keperluan ini dengan mudah melalui fungsi pemetaan polimorfik.

Jenis pemetaan polimorfik
Hibernate menyediakan beberapa jenis pemetaan polimorfik untuk mengendalikan perhubungan antara kelas yang diwarisi:

  • joined-subclass: Mencipta jadual berasingan untuk setiap subkelas, yang mengandungi dalam kelas Semua lajur.
  • table-per-class: Buat jadual berasingan untuk setiap subkelas, yang mengandungi hanya lajur khusus subkelas.
  • union-subclass: Sama seperti joined-subclass, tetapi menggabungkan semua lajur subclass dalam jadual kelas induk. joined-subclass 类似,但在父类表中联合所有子类的列。

实战案例
假设我们有一个抽象类 Person,有两个子类 StudentTeacherPerson 类有 idname 字段,Student 类有 grade 字段,Teacher 类有 salary 字段。

Hibernate 映射配置
对于 Person 类:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Person {
  @Id
  private Long id;
  private String name;
  // ... 省略其他字段
}

对于 Student 类:

@Entity
public class Student extends Person {
  private Integer grade;
  // ... 省略其他字段
}

对于 Teacher

Kes praktikal
Andaikan kita mempunyai kelas abstrak Orang dan dua subkelas Pelajar dan Guru. Kelas Orang mempunyai medan id dan name, kelas Student mempunyai gred > medan, < Kelas kod>Guru mempunyai medan gaji.

Konfigurasi pemetaan hibernate

Untuk kelas Orang:

@Entity
public class Teacher extends Person {
  private Integer salary;
  // ... 省略其他字段
}

Untuk kelas Pelajar:
    Session session = sessionFactory.getCurrentSession();
    List<Person> persons = session.createQuery("from Person", Person.class).list();
  • Untuk kelas Guru:
  • rrreee
  • Contoh pertanyaan
  • Untuk menanyakan semua kakitangan, anda boleh menggunakan kod berikut:
rrreee

Hibernate akan memuatkan data subkelas secara automatik mengikut strategi pewarisan.

Kelebihan
  • Memudahkan pemetaan kelas yang diwarisi.
Menyokong pertanyaan polimorfik untuk mendapatkan semula semua data subkategori dengan cara yang konsisten. 🎜🎜Mengikut strategi pewarisan, struktur jadual boleh dioptimumkan. 🎜🎜🎜🎜 NOTA 🎜🎜🎜🎜 Adalah sangat penting untuk memilih strategi pewarisan yang sesuai, yang mempengaruhi prestasi dan ciri kebolehgunaan. 🎜🎜Apabila menggunakan pemetaan polimorfik, anda harus memastikan bahawa struktur jadual pangkalan data sepadan dengan konfigurasi pemetaan. 🎜🎜

Atas ialah kandungan terperinci Bagaimanakah Hibernate melaksanakan pemetaan polimorfik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn