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.
GO TO FULL VERSION