Penerangan

Satu lagi strategi untuk menyimpan hierarki kelas dalam pangkalan data dipanggil Joined Table. Terdapat anotasi khas untuknya:

@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;
}

Apabila menggunakan anotasi ini, Hibernate akan mengharapkan jadual berasingan dalam pangkalan data untuk setiap kelas dan subkelasnya. Apabila memilih data daripada mereka, anda perlu menggunakan pengendali SQL JOIN.

Contoh skema pangkalan 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 sesetengah pelanggan daripada jadual, maka Hibernate perlu menggunakan JOIN untuk menyertai jadual:

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

@PrimaryKeyJoinColumn

Kelas Entiti Anak mempunyai lajur dalam jadual yang merujuk kepada id objek kelas Entiti induk. Nama lajur ini secara lalai sama dengan nama lajur 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;
}

Kemudian jadual pangkalan data akan kelihatan 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 mengatasi nama lajur dalam jadual bergantung, maka 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;
}

Kemudian jadual pangkalan data akan kelihatan 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
}