Inheritance এর জন্য Practical উদাহরণ

JPA তে Inheritance Mapping - জেপিএ  (JPA) - Java Technologies

309

JPA (Java Persistence API) তে Inheritance একটি মৌলিক ধারণা, যেখানে একটি শ্রেণী (class) অন্য শ্রেণী (class) থেকে বৈশিষ্ট্য এবং আচরণ (properties and behaviors) উত্তরাধিকারী হয়। জেভিএইচ (JPA) এ ইনহেরিটেন্স সম্পর্কিত তিনটি মূল কৌশল বা স্ট্রাটেজি রয়েছে:

  1. Joined Strategy
  2. Table-per-Class Strategy
  3. Single Table Strategy

এই তিনটি স্ট্র্যাটেজি জাভা অবজেক্টের ইনহেরিটেন্স মডেল ডেটাবেসে ম্যাপ করার জন্য ব্যবহৃত হয়।

এই উদাহরণে, আমরা Inheritance in JPA এর জন্য Joined Strategy এবং Table-per-Class Strategy এর মাধ্যমে একটি বাস্তব প্রয়োগ (Practical Example) দেখবো।


1. Joined Strategy

Joined Strategy তে প্রতি সাবক্লাসের জন্য আলাদা টেবিল তৈরি করা হয় এবং সব টেবিলের মধ্যে একটি সম্পর্ক (JOIN) প্রতিষ্ঠিত থাকে। এই স্ট্র্যাটেজি ডেটাবেসে normalized কাঠামো তৈরি করে, যেখানে মূল ক্লাসের টেবিল এবং সাবক্লাসের টেবিল পৃথকভাবে থাকে, কিন্তু তাদের মধ্যে সম্পর্ক থাকে।

Joined Strategy উদাহরণ:

ধরা যাক, আমাদের একটি Person ক্লাস আছে এবং এর দুটি সাবক্লাস Employee এবং Customer আছে।

Step 1: Entity Classes

import javax.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    // Getter and Setter methods
}

@Entity
public class Employee extends Person {
    private String department;

    // Getter and Setter methods
}

@Entity
public class Customer extends Person {
    private String membershipLevel;

    // Getter and Setter methods
}

এখানে, @Inheritance(strategy = InheritanceType.JOINED) অ্যানোটেশন ব্যবহার করা হয়েছে, যা Joined Strategy এর মাধ্যমে ইনহেরিটেন্স মডেল নির্ধারণ করে।

Step 2: Database Schema

  • Person টেবিল:

    idnameemail
    1Johnjohn@example.com
  • Employee টেবিল:

    iddepartment
    1HR
  • Customer টেবিল:

    idmembershipLevel
    2Silver

এখানে, Employee এবং Customer টেবিল শুধুমাত্র তাদের নিজস্ব specific তথ্য ধারণ করে এবং Person টেবিলের id, name, এবং email ফিল্ডগুলির সাথে যুক্ত থাকে।


2. Table-per-Class Strategy

Table-per-Class Strategy তে প্রতিটি সাবক্লাসের জন্য একটি আলাদা টেবিল তৈরি হয় এবং এতে ক্লাসের সকল ফিল্ড (superclass এবং subclass) থাকে। এখানে JOIN এর কোনো প্রয়োজন হয় না, কারণ প্রতিটি ক্লাসের জন্য সম্পূর্ণ তথ্য তার নিজস্ব টেবিলেই থাকে।

Table-per-Class Strategy উদাহরণ:

import javax.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    // Getter and Setter methods
}

@Entity
public class Employee extends Person {
    private String department;

    // Getter and Setter methods
}

@Entity
public class Customer extends Person {
    private String membershipLevel;

    // Getter and Setter methods
}

এখানে, @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) অ্যানোটেশন ব্যবহার করা হয়েছে, যা Table-per-Class Strategy কে নির্দেশ করে।

Step 2: Database Schema

এখানে, Person টেবিলের ডেটা Employee এবং Customer টেবিলেও ডুপ্লিকেট থাকে, কারণ প্রতিটি টেবিলের সব ফিল্ড (superclass + subclass) আলাদা টেবিলে রয়েছে।


পার্থক্য - Joined Strategy এবং Table-per-Class Strategy

বৈশিষ্ট্যJoined StrategyTable-per-Class Strategy
টেবিল সংখ্যাতিনটি টেবিল, একটি superclass এবং দুটি subclass টেবিলপ্রতিটি ক্লাসের জন্য আলাদা একটি টেবিল
ডেটা ডুপ্লিকেশনকম, কারণ শুধুমাত্র subclass specific ডেটা টেবিলে থাকেবেশি, কারণ superclass এবং subclass ডেটা আলাদা টেবিলে থাকে
পারফরম্যান্সকিছুটা ধীর, কারণ JOIN অপারেশন প্রয়োজনদ্রুত, কারণ ডেটা আলাদা টেবিলে থাকে এবং JOIN এর প্রয়োজন হয় না
নরমালাইজেশনঅধিক নরমালাইজডকম নরমালাইজড
ডেটাবেসের স্টোরেজকম স্টোরেজ প্রয়োজন (শেয়ারড তথ্য)বেশি স্টোরেজ প্রয়োজন (ডুপ্লিকেট ডেটা)
কোডিং সহজতাসাবলীল, তবে JOIN প্রয়োজনসহজ, কারণ ডেটা আলাদা টেবিলে থাকে

সারাংশ


JPA Inheritance ব্যবহারে দুটি প্রধান স্ট্র্যাটেজি হল Joined Strategy এবং Table-per-Class StrategyJoined Strategy ডেটাবেসে অবজেক্টর মধ্যে সম্পর্ক স্থাপন করে (JOIN), যেখানে ডেটা নরমালাইজড থাকে, কিন্তু পারফরম্যান্স কিছুটা কম হতে পারে। Table-per-Class Strategy সব ডেটা আলাদা টেবিলে রাখে, যার ফলে পারফরম্যান্স উন্নত হয়, তবে ডেটার ডুপ্লিকেশন এবং স্টোরেজের সমস্যা হতে পারে। আপনার প্রজেক্টের প্রয়োজন অনুযায়ী আপনি যে কোনো স্ট্র্যাটেজি নির্বাচন করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...