Inheritance Mapping হল Hibernate এবং Spring ORM এ ডেটাবেজ টেবিলের মধ্যে অবজেক্ট-ওরিয়েন্টেড ইনহেরিটেন্সের ধারণা বাস্তবায়নের একটি পদ্ধতি। জাভাতে যেভাবে ক্লাস ইনহেরিট করে সাবক্লাস তৈরি করা হয়, ঠিক সেভাবেই ডেটাবেজ টেবিলেও একই সম্পর্ক ম্যাপ করা যায়।
Hibernate বিভিন্ন কৌশল ব্যবহার করে Inheritance Mapping পরিচালনা করে, যা ডেটাবেজ ডিজাইন এবং পারফরম্যান্সের উপর নির্ভর করে।
Inheritance Mapping এর ধরন
Hibernate তিনটি প্রধান কৌশল সরবরাহ করে Inheritance Mapping এর জন্য:
Single Table Strategy
সব ইনহেরিটেড ক্লাসের জন্য একটি মাত্র টেবিল তৈরি হয়। এটি খুবই সহজ এবং দ্রুত কার্যকর, কিন্তু বড় ডেটাবেজে অতিরিক্ত স্থান নষ্ট করতে পারে।
Table per Class Strategy
প্রত্যেক সাবক্লাসের জন্য আলাদা টেবিল তৈরি হয়। এটি স্পেস ব্যবহারে দক্ষ, তবে কোয়েরি জটিল হতে পারে।
Joined Table Strategy
প্রত্যেক ক্লাসের জন্য আলাদা টেবিল তৈরি হয় এবং তাদের মধ্যে সম্পর্ক বজায় রাখার জন্য জয়েন অপারেশন প্রয়োজন হয়। এটি খুবই নমনীয় কিন্তু ধীরগতির হতে পারে।
উদাহরণ: Inheritance Mapping বাস্তবায়ন
১. Entity ক্লাস তৈরি করা
Base Class (Parent Class)
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public abstract class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
// Getters and Setters
}
বর্ণনা:
@Entity: Hibernate এর জন্য এটি একটি Entity ক্লাস হিসেবে ঘোষণা করে।@Inheritance: ইনহেরিটেন্স স্ট্র্যাটেজি নির্ধারণ করে।@DiscriminatorColumn: Discriminator কলাম নির্ধারণ করে যা সাবক্লাস চিহ্নিত করে।
Subclass (Child Class)
@Entity
@DiscriminatorValue("FullTime")
public class FullTimeEmployee extends Employee {
private double salary;
// Getters and Setters
}
@Entity
@DiscriminatorValue("PartTime")
public class PartTimeEmployee extends Employee {
private double hourlyRate;
// Getters and Setters
}
বর্ণনা:
@DiscriminatorValue: প্রতিটি সাবক্লাসের জন্য আলাদা মান নির্ধারণ করে।FullTimeEmployeeএবংPartTimeEmployeeমূলত Parent Class (Employee) থেকে ইনহেরিট করে।
২. Repository ইন্টারফেস
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
}
বর্ণনা:
JpaRepositoryব্যবহার করে ডেটাবেজ অপারেশনগুলো সহজে পরিচালনা করা যায়।
৩. সার্ভিস ক্লাস
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
public void saveEmployee(Employee employee) {
employeeRepository.save(employee);
}
public List<Employee> getAllEmployees() {
return employeeRepository.findAll();
}
}
৪. কন্ট্রোলার ক্লাস
@RestController
@RequestMapping("/employees")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@PostMapping("/fulltime")
public void saveFullTimeEmployee(@RequestBody FullTimeEmployee employee) {
employeeService.saveEmployee(employee);
}
@PostMapping("/parttime")
public void savePartTimeEmployee(@RequestBody PartTimeEmployee employee) {
employeeService.saveEmployee(employee);
}
@GetMapping
public List<Employee> getAllEmployees() {
return employeeService.getAllEmployees();
}
}
Inheritance Mapping এর সুবিধা
- জাভার অবজেক্ট-ওরিয়েন্টেড মডেলের সাথে ডেটাবেজ কাঠামোর সমন্বয়।
- ডেটার পুনরাবৃত্তি হ্রাস।
- ডেটাবেজ কোয়েরির সময় ফ্লেক্সিবিলিটি।
Inheritance Mapping সঠিকভাবে নির্বাচন এবং ব্যবহার করলে এটি ডেটাবেজ পারফরম্যান্স এবং রক্ষণাবেক্ষণে সহায়ক হয়।