সংরক্ষণের সমস্যা

আজ আমাদের কাছে একটি নতুন এবং অত্যন্ত আকর্ষণীয় স্কিম থাকবে - হাইবারনেট বৈশিষ্ট্যগুলি ব্যবহার করে ডাটাবেসে ক্লাসের শ্রেণিবিন্যাস সংরক্ষণ করা হবে।

একটি শ্রেণী অনুক্রম একটি উত্তরাধিকার সম্পর্কের দ্বারা একে অপরের সাথে সম্পর্কিত শ্রেণীগুলির একটি সেট।

কল্পনা করুন যে আপনার তিনটি ক্লাস আছে যা আপনি ডাটাবেসে সংরক্ষণ করতে চান:

class User {
  int id;
  String name;
  LocalDate birthday;
}
class Employee extends User {
 	String occupation;
 	int salary;
 	LocalDate join;
}
class Client extends User {
   String address;
}

ক্লাস একে অপরের থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হয়। এবং সবচেয়ে মজার বিষয় হল আপনি হাইবারনেট ব্যবহার করতে চান যাতে ডাটাবেসে এই ক্লাসের বস্তু সংরক্ষণ করা যায়।

সমাধান প্রকার

হাইবারনেটের 4টি সম্ভাব্য উপায় রয়েছে যা এটি একটি ডাটাবেসের টেবিলের সাথে একটি শ্রেণী অনুক্রমকে সংযুক্ত করতে পারে:

  • ম্যাপড সুপারক্লাস
  • একক টেবিল
  • যোগদান টেবিল
  • ক্লাস প্রতি টেবিল

প্রতিটি কৌশল ডাটাবেসে তার নিজস্ব টেবিল গঠন অনুমান করে। কখনও কখনও তারা বেশ জটিল হয়। কিন্তু তাদের কাছে HQL এর জন্য প্রশ্ন খুবই সহজ। এটি ঠিক সেই ক্ষেত্রে যেখানে হাইবারনেটের সুবিধাগুলি স্পষ্টভাবে প্রকাশিত হয়।

আমি কখনই এই শব্দগুলি রাশিয়ান ভাষায় অনুবাদ করে শুনিনি, তাই আমি এগুলিকে ইংরেজিতে উচ্চারণের পরামর্শ দিই।

নীচে আমরা তাদের প্রত্যেকের অর্থ কী তা বিশ্লেষণ করব।

@ম্যাপডসুপারক্লাস

আসুন সহজ সমাধান দিয়ে শুরু করি - ডাটাবেসে আপনার প্রতিটি ক্লাসের জন্য আলাদা টেবিল রয়েছে । উদাহরণস্বরূপ, এইগুলি:

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
}

শুধুমাত্র আপনি জানেন যে এই টেবিলগুলির জন্য ক্লাসগুলি একটি অনুক্রমের সাথে সংযুক্ত । আপনি যদি হাইবারনেটকেও এটি সম্পর্কে জানতে চান তবে আপনাকে @MappedSuperclass টীকাটি অভিভাবক শ্রেণিতে যুক্ত করতে হবে । এটি ছাড়া, হাইবারনেট কেবল প্যারেন্ট ক্লাসের ক্ষেত্র এবং টীকা উপেক্ষা করবে।

এই টীকা সহ ক্লাসগুলি এইরকম দেখাবে:

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

এটি ক্লাস হায়ারার্কি এবং ডাটাবেস লিঙ্ক করার সবচেয়ে আদিম উপায়। এই পদ্ধতিটি আসলে শুধুমাত্র আপনাকে ক্লাসে ডুপ্লিকেট ক্ষেত্রগুলি এড়াতে দেয়।

HQL-এ ডেটাবেস কোয়েরি শুধুমাত্র সেই সত্তাকে ফেরত দেবে যার ধরন স্পষ্টভাবে উল্লেখ করা আছে। আপনি HQL-এ একটি ডাটাবেস কোয়েরি লিখতে পারবেন না এবং সমস্ত ব্যবহারকারীর একটি তালিকা পেতে পারবেন: ব্যবহারকারী, কর্মচারী, ক্লায়েন্ট।