विवरण

डेटाबेस में एक वर्ग पदानुक्रम को संग्रहीत करने की एक अन्य रणनीति को ज्वाइन टेबल कहा जाता है। इसके लिए एक विशेष एनोटेशन है:

@Inheritance(strategy = InheritanceType.JOINED)

हमारी कक्षाओं का एक उदाहरण:

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

इस एनोटेशन का उपयोग करते समय, हाइबरनेट प्रत्येक वर्ग और उसके उपवर्गों के लिए डेटाबेस में एक अलग तालिका की अपेक्षा करेगा। उनसे डेटा का चयन करते समय, आपको SQL JOIN ऑपरेटर का उपयोग करना होगा।

डेटाबेस स्कीमा उदाहरण:

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
}

यदि आप तालिका से किसी ग्राहक का डेटा प्राप्त करने का निर्णय लेते हैं, तो हाइबरनेट को तालिकाओं में शामिल होने के लिए JOIN का उपयोग करना होगा:

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

@PrimaryKeyJoinColumn

चाइल्ड एंटिटी क्लास में टेबल में एक कॉलम होता है जो पैरेंट एंटिटी क्लास के ऑब्जेक्ट आईडी को संदर्भित करता है। इस कॉलम का नाम डिफ़ॉल्ट रूप से पैरेंट क्लास के कॉलम के नाम के बराबर होता है।

उदाहरण:

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

तब डेटाबेस तालिका इस तरह दिखेगी:

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
}

यदि आप निर्भर तालिकाओं में कॉलम नाम को ओवरराइड करना चाहते हैं, तो आपको @PrimaryKeyJoinColumn एनोटेशन का उपयोग करने की आवश्यकता है । उदाहरण:

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

तब डेटाबेस तालिका इस तरह दिखेगी:

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
}