Embeddable এর জন্য বাস্তব উদাহরণ

Embeddable এবং Embedded Objects - জেপিএ  (JPA) - Java Technologies

281

JPA (Java Persistence API) তে Embeddable হল একটি বিশেষ ধরনের Entity ক্লাস, যা Composite Attribute বা Value Object হিসেবে ব্যবহৃত হয়। এর মানে হলো, Embeddable ক্লাসটি একাধিক ফিল্ড সমন্বিত একটি গঠন বা অবজেক্ট হতে পারে যা একটি প্রধান Entity তে এম্বেড করা যাবে। এটি Entity এর মধ্যে পুনঃব্যবহারযোগ্য ডেটা কম্পোজিশন (composition) তৈরি করতে সাহায্য করে।

এটি এমন পরিস্থিতিতে ব্যবহৃত হয় যখন আপনি বিভিন্ন প্রপার্টি বা ফিল্ডকে একত্রে একটি অবজেক্টের আকারে ব্যবহার করতে চান, যা পরে Entity তে এম্বেড করা যায়।


Embeddable এবং @Embedded এর ধারণা

  • @Embeddable: এটি একটি ক্লাসের উপর ব্যবহার করা হয় যেটি অন্য Entity তে এম্বেড করা হবে। এটি সাধারণত সেগুলির জন্য ব্যবহৃত হয় যেগুলি Entity এর একটি অংশ হিসেবে কাজ করবে।
  • @Embedded: এটি Entity ক্লাসের ভিতরে একটি Embeddable ক্লাস এম্বেড করতে ব্যবহৃত হয়।

Embeddable এর উদাহরণ

ধরা যাক, আমরা একটি Address নামক একটি ক্লাস তৈরি করতে চাই, যেখানে একটি Person Entity তে Address ফিল্ড হিসেবে এম্বেড করা হবে।


1. Embeddable Class (Address)

এটি একটি সাধারণ Embeddable ক্লাস, যা Street, City, এবং PostalCode ফিল্ড ধারণ করবে।

import javax.persistence.Embeddable;

@Embeddable
public class Address {

    private String street;
    private String city;
    private String postalCode;

    // Constructors
    public Address() {
    }

    public Address(String street, String city, String postalCode) {
        this.street = street;
        this.city = city;
        this.postalCode = postalCode;
    }

    // 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 getPostalCode() {
        return postalCode;
    }

    public void setPostalCode(String postalCode) {
        this.postalCode = postalCode;
    }
}

এখানে, @Embeddable অ্যানোটেশন ব্যবহার করা হয়েছে, যা Address ক্লাসটিকে একটি এম্বেডেবল ক্লাস হিসাবে চিহ্নিত করে।


2. Main Entity Class (Person)

এখন, আমরা একটি Person Entity ক্লাস তৈরি করব, যেখানে Address ক্লাসটি @Embedded অ্যানোটেশন দিয়ে এম্বেড করা হবে।

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;  // Embedding Address as an embedded object

    // Constructors
    public Person() {
    }

    public Person(Long id, String name, Address address) {
        this.id = id;
        this.name = name;
        this.address = address;
    }

    // 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;
    }
}

এখানে:

  • @Embedded অ্যানোটেশনটি Person Entity তে Address অবজেক্ট এম্বেড করেছে।
  • address ফিল্ডটি Address ক্লাসের অবজেক্ট হিসেবে ব্যবহৃত হচ্ছে।

3. Database Schema

JPA এই Embeddable ক্লাসের ফিল্ডগুলোকে Person টেবিলের কলাম হিসেবে এম্বেড করবে। ডেটাবেসে নিম্নরূপ একটি টেবিল তৈরি হবে:

idnamestreetcitypostalCode
1JohnElm St.Springfield12345
2JaneOak St.Shelbyville67890

এখানে, street, city, এবং postalCode ফিল্ডগুলি ডেটাবেস টেবিলের কলাম হিসেবে থাকবে এবং Person Entity-তে Address অবজেক্টটি এম্বেড হবে।


4. Using the Entity and Embeddable Class

এখন, Person Entity তৈরি করতে, এবং Address ক্লাসের অবজেক্ট যোগ করতে পারেন।

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main {

    public static void main(String[] args) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJpaUnit");
        EntityManager em = emf.createEntityManager();

        // Creating a new Address
        Address address = new Address("Elm St.", "Springfield", "12345");

        // Creating a new Person and embedding Address
        Person person = new Person(1L, "John", address);

        // Persist the Person (and embedded Address)
        em.getTransaction().begin();
        em.persist(person);
        em.getTransaction().commit();

        // Retrieve the Person
        Person retrievedPerson = em.find(Person.class, 1L);
        System.out.println("Person: " + retrievedPerson.getName());
        System.out.println("Address: " + retrievedPerson.getAddress().getStreet());

        em.close();
        emf.close();
    }
}

এখানে:

  • Person Entity তে Address এম্বেড করা হয়েছে।
  • em.persist(person) মাধ্যমে আমরা Person Entity (এবং তার সাথে এম্বেড করা Address অবজেক্ট) ডেটাবেসে সেভ করেছি।

Embeddable এবং @Embedded এর সুবিধা:

  1. Code Reusability: একাধিক Entity ক্লাসে একই Embeddable অবজেক্ট ব্যবহার করা যায়।
  2. Improved Design: Entity ক্লাসগুলিতে উপযুক্ত কম্পোজিশন বজায় রেখে কোডের ডিজাইন উন্নত হয়।
  3. Data Encapsulation: Embeddable ক্লাসের মাধ্যমে ডেটা এনক্যাপসুলেশন সহজ হয়, এবং Entity ক্লাসের ভিতরে সংগঠিত ডেটা পরিচালনা করা যায়।

সারাংশ


JPA-তে Embeddable এবং @Embedded এর মাধ্যমে Entity তে অন্যান্য অবজেক্ট এম্বেড করা যায়, যা আপনার ডেটা মডেলকে আরো পরিষ্কার এবং পুনঃব্যবহারযোগ্য করে তোলে। Embeddable ক্লাস একাধিক ফিল্ড বা প্রপার্টি ধারণ করে এবং এটি Entity এর অংশ হিসেবে ব্যবহৃত হয়। এর মাধ্যমে ডেটাবেসের টেবিলের মধ্যে বিভিন্ন সম্পর্কিত ডেটা একত্রে সাজানো যায়। @Embedded অ্যানোটেশন Entity তে Embeddable ক্লাস এম্বেড করার জন্য ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...