বর্ণনা

একটি ডাটাবেসে একটি শ্রেণী শ্রেণিবিন্যাস সংরক্ষণ করার জন্য আরেকটি কৌশল হল জয়েনড টেবিল। এটির জন্য একটি বিশেষ টীকা আছে:

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