JPA (Java Persistence API) ব্যবহারের সময় ডেটাবেসের মধ্যে সম্পর্ক স্থাপন এবং ডেটার মডেলিং করতে @Embeddable এবং @Embedded এনোটেশন দুটি খুবই গুরুত্বপূর্ণ। এগুলি মূলত এম্বেডেড অবজেক্ট তৈরি করতে ব্যবহৃত হয়, যা একাধিক Entity তে পুনঃব্যবহারযোগ্য এবং ডেটাবেস টেবিলের কলাম হিসেবে অবজেক্টের মান সংরক্ষণ করতে সহায়তা করে।
@Embeddable এনোটেশন
@Embeddable এনোটেশন ব্যবহার করে একটি ক্লাসকে এম্বেডেড অবজেক্ট হিসেবে চিহ্নিত করা হয়। যখন একটি Entity অন্য Entity এর মধ্যে একটি এম্বেডেড অবজেক্ট ধারণ করে, তখন সেই অবজেক্টের ফিল্ডগুলিকে মূল Entity এর টেবিলে কলাম হিসেবে ম্যাপ করা হয়। এটি মূলত ডেটাবেসের মধ্যে একটি টেবিলের অংশ হিসেবে একাধিক অ্যাট্রিবিউটের গুচ্ছ হিসেবে কাজ করে।
ব্যবহার:
@Embeddable এনোটেশন ক্লাসের উপরে ব্যবহার করা হয়, যেটি অন্য Entity তে @Embedded এনোটেশন দ্বারা ব্যবহৃত হয়।
উদাহরণ:
ধরা যাক, আমাদের একটি Address ক্লাস আছে, যার মধ্যে street, city, zipCode ফিল্ড রয়েছে, এবং এই Address অবজেক্টটি আমরা Person Entity তে এমবেড করতে চাই।
import javax.persistence.Embeddable;
@Embeddable
public class Address {
private String street;
private String city;
private String zipCode;
// Getters and Setters
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
}
এখানে, Address ক্লাসটি @Embeddable অ্যানোটেশন দ্বারা চিহ্নিত করা হয়েছে, যা এটি Person Entity তে এমবেড হতে সক্ষম হবে।
@Embedded এনোটেশন
@Embedded এনোটেশন ব্যবহার করে @Embeddable ক্লাসকে Entity ক্লাসে অন্তর্ভুক্ত (embed) করা হয়। যখন কোনো @Embeddable ক্লাস একটি Entity তে এমবেড করা হয়, তখন তার ফিল্ডগুলো ডেটাবেস টেবিলের কলাম হিসেবে ব্যবহার করা হয়।
ব্যবহার:
@Embedded এনোটেশন ব্যবহার করে আপনি কোনো @Embeddable ক্লাসকে Entity তে এমবেড করতে পারেন।
উদাহরণ:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Embedded;
@Entity
public class Person {
@Id
private Long id;
private String name;
@Embedded
private Address address; // Address অবজেক্টটি Embedded
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
এখানে, Person Entity তে Address অবজেক্টটি @Embedded এনোটেশন ব্যবহার করে অন্তর্ভুক্ত করা হয়েছে। ডেটাবেসে Person টেবিলটি এখন address এর কলামগুলিও ধারণ করবে, যেমন street, city, এবং zipCode।
@Embeddable এবং @Embedded এর সুবিধা
- ডেটাবেসের স্ট্রাকচার পরিষ্কার করা: একাধিক ফিল্ডগুলিকে একটি অবজেক্টে প্যাকেজ করা সহজ হয়, যেমন
AddressবাContactDetailsএর মতো অবজেক্টগুলিকে প্রধান Entity ক্লাসের মধ্যে এমবেড করা যায়। - কোড রিডেবিলিটি বৃদ্ধি: বিভিন্ন ক্ষেত্রের মানগুলোকে একত্রে রাখার মাধ্যমে কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি পায়, যা ক্লাস এবং কোডের রিডেবিলিটি উন্নত করে।
- ডেটাবেস স্টোরেজ অপটিমাইজেশন: Embedded Objects ডেটাবেস টেবিলের কলাম হিসেবে সংরক্ষিত হলে, আপনার ডেটাবেস স্কিমা কমপ্লেক্স হবে না, তবে প্রয়োজনীয় সব ফিল্ডের তথ্য সেভ রাখা যাবে।
- পরিষ্কার এবং অভ্যন্তরীণ সম্পর্ক তৈরি করা:
@Embeddableএবং@Embeddedব্যবহার করে আপনি একটি Entity তে অনেকগুলো সম্পর্কিত ফিল্ড একত্রে সংরক্ষণ করতে পারবেন, যা ডেটাবেসের গঠন পরিষ্কার রাখবে।
@Embeddable এবং @Embedded এর জন্য Additional Features
@AttributeOverrideএবং@AssociationOverride: যদি আপনি embedded অবজেক্টের কোনো প্রপার্টির নাম পরিবর্তন করতে চান, তবে আপনি@AttributeOverrideব্যবহার করতে পারেন। এটি ডেটাবেসের কলামের নাম বা বৈশিষ্ট্য পরিবর্তন করতে সাহায্য করে।উদাহরণ:
@Embedded @AttributeOverride(name = "street", column = @Column(name = "address_line")) private Address address;এখানে,
streetপ্রপার্টির নামaddress_lineনামে ডেটাবেস কলামে ম্যাপ করা হবে।@ElementCollection: যদি আপনার@Embeddableক্লাসে একটি লিস্ট বা সেট (যেমন ফোন নম্বর বা ঠিকানা) থাকে, তবে@ElementCollectionব্যবহার করা যেতে পারে, যা একটিCollectionঅবজেক্টকে Entity এর মধ্যে এমবেড করা হয়।
সারাংশ
@Embeddable এবং @Embedded JPA-তে অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিং প্যাটার্নের সাথে ডেটাবেস টেবিলের কলামগুলিকে সম্পর্কিত করতে ব্যবহৃত হয়। @Embeddable একটি ক্লাসকে এমবেডেড অবজেক্ট হিসেবে চিহ্নিত করে, এবং @Embedded এই অবজেক্টটিকে Entity ক্লাসে অন্তর্ভুক্ত (embed) করে। এটি ডেটাবেস স্কিমা এবং কোডের রিডেবিলিটি এবং মেন্টেনেন্স সহজ করে, কারণ একাধিক বৈশিষ্ট্য একটি অবজেক্টে প্যাকেজ করা যায় এবং Entity ক্লাসে সহজে ব্যবহার করা যায়।
Read more