Keterangan

Strategi lain untuk menyimpan hirarki kelas dalam database disebut Joined Table. Ada anotasi khusus untuk itu:

@Inheritance(strategy = InheritanceType.JOINED)

Contoh kelas kami:

@Inheritance(strategy = InheritanceType.JOINED)
@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;
}

Saat menggunakan anotasi ini, Hibernate akan mengharapkan tabel terpisah di database untuk setiap kelas dan subkelasnya. Saat memilih data dari mereka, Anda harus menggunakan operator SQL JOIN.

Contoh skema basis data:

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

Jika Anda memutuskan untuk mendapatkan data beberapa klien dari tabel, maka Hibernasi harus menggunakan GABUNG untuk menggabungkan tabel:

SELECT u.id, u.name, u.birthday, c.address FROM user u JOIN client c ON u.id = c.id;

@PrimaryKeyJoinColumn

Kelas Entitas Anak memiliki kolom dalam tabel yang merujuk ke id objek dari kelas Entitas induk. Nama kolom ini secara default sama dengan nama kolom kelas induk.

Contoh:

@Inheritance(strategy = InheritanceType.JOINED)
@Entity
class User {
  @Id
  int user_identifier;
  String name;
  LocalDate birthday;
}
@Entity
class Employee extends User {
 	String occupation;
 	int salary;
 	LocalDate join;
}
@Entity
class Client extends User {
   String address;
}

Maka tabel database akan terlihat seperti ini:

CREATE TABLE user {
  user_identifier INT,
  name VARCHAR,
  birthday DATE
}
CREATE TABLE employee {
  user_identifier INT,
  occupation VARCHAR,
  salary INT,
  join DATE
}
CREATE TABLE client {
  user_identifier INT,
  address VARCHAR
}

Jika Anda ingin mengganti nama kolom dalam tabel dependen, Anda perlu menggunakan anotasi @PrimaryKeyJoinColumn . Contoh:

@Inheritance(strategy = InheritanceType.JOINED)
@Entity
class User {
  @Id
  int user_identifier;
  String name;
  LocalDate birthday;
}
@Entity
@PrimaryKeyJoinColumn(name=”user_id”)
class Employee extends User {
 	String occupation;
 	int salary;
 	LocalDate join;
}
@Entity
@PrimaryKeyJoinColumn(name=”user_id2”)
class Client extends User {
   String address;
}

Maka tabel database akan terlihat seperti ini:

CREATE TABLE user {
  user_identifier INT,
  name VARCHAR,
  birthday DATE
}
CREATE TABLE employee {
  user_id INT,
  occupation VARCHAR,
  salary INT,
  join DATE
}
CREATE TABLE client {
  user_id2 INT,
  address VARCHAR
}