5.1 Katrangan

Lan pungkasanipun, strategi pungkasan Tabel saben kelas. Iku tegese tabel kapisah bakal digunakake kanggo saben kelas. Ing pangertèn, iki MappedSuperClass padha, mung ing wangun dianyari.

Pisanan, sampeyan kudu nggunakake anotasi:

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

Kelas kanthi anotasi iki bakal katon kaya iki:


@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
class User {
	int id;
	String name;
	LocalDate birthday;
}

@Entity
class Employee extends User {
 	String occupation;
 	int salary;
 	LocalDate join;
}

@Entity
class Client extends User {
	String address;
}

Lan tabel kapisah kanggo saben kelas. Contone, iki:


CREATE TABLE user {
	id INT,
	name VARCHAR,
	birthday DATE
}

CREATE TABLE employee {
	id INT,
	name VARCHAR,
	birthday DATE,
	occupation VARCHAR,
	salary INT,
	join DATE
}

CREATE TABLE client {
	id INT,
	name VARCHAR,
	birthday DATE,
	address VARCHAR
}

Bentenane utama yaiku id pass-through (PRIMER KEY) digunakake kanggo kabeh tabel. Sampeyan ora bisa duwe baris beda karo id padha, ora mung ing meja padha, nanging uga ing grup iki tabel. Hibernate bakal ngurus iki.

5.2 Tuladha

Iku banget menarik kanggo ndeleng carane iku kabeh bisa.

Sampeyan bisa nulis pitakon HQL sing prasaja kanggo entuk kabeh pangguna: Panganggo, Karyawan, Klien :

List<User> accounts = session.createQuery("from User").list();

Nanging Hibernate, bakal ngasilake pitakon sing menarik banget. Bakal nggawe pilihan saka kabeh tabel, banjur gabungke liwat UNION ALL dadi jinis tabel virtual, lan mung banjur bakal nggoleki lan / utawa milih

Nanging kanggo nggabungake tabel kanthi kolom sing beda-beda, luwih dhisik kudu ditambah karo kolom palsu. Contone, tabel pangguna kudu ditambah karo kolom:

  • occupation VARCHAR
  • salary INT
  • join DATE
  • address VARCHAR

Conto query SQL menyang tabel pangguna sadurunge eksekusi UNION ALL:


SELECT   id,
         name,
         birthday,
         CAST(NULL AS VARCHAR) AS occupation,
         CAST(NULL AS INT) AS salary,
         CAST(NULL AS DATE) AS join,
         CAST(NULL AS VARCHAR) AS address,
         0 AS clazz
FROM  user

Conto pitakon SQL menyang tabel karyawan sadurunge eksekusi UNION ALL:


SELECT   id,
         name,
         birthday,
         occupation,
         salary,
         join,
         CAST(NULL AS VARCHAR) AS address,
         1 AS clazz
FROM  employee

Conto query SQL menyang tabel klien sadurunge eksekusi UNION ALL:


SELECT  id,
        name,
        birthday,
        CAST(NULL AS VARCHAR) AS occupation,
        CAST(NULL AS INT) AS salary,
        CAST(NULL AS DATE) AS join,
        address,
        2 AS clazz
FROM client

Kabar apik yaiku pitakon HQL bakal bisa digunakake kaya sing dikarepake.

Kabar ala iku bisa dadi alon yen ana akeh data ing tabel. Amarga pisanan sampeyan kudu milih data saka kabeh tabel, banjur gabungke baris karo UNION ALL, lan mung banjur nyaring.