One-to-One Association

Java Technologies - হাইবারনেট (Hibernate) - Hibernate Associations (Relationships)
234

Hibernate এর One-to-One Association হল একটি সম্পর্ক যেখানে দুটি entity একে অপরের সাথে একে একে সম্পর্কিত থাকে। অর্থাৎ, একটি entity একটি ইনস্ট্যান্সের সাথে অন্য একটি entity-এর একক ইনস্ট্যান্সের সাথে সম্পর্ক স্থাপন করে।

একটি সাধারণ উদাহরণ হতে পারে Person এবং Passport এর মধ্যে সম্পর্ক, যেখানে প্রতিটি Person একটি মাত্র Passport ধারণ করে এবং প্রতিটি Passport শুধুমাত্র একটি Person এর সাথে সম্পর্কিত থাকে।

Hibernate-এ One-to-One Association তৈরি করতে @OneToOne এনোটেশন ব্যবহার করা হয়। এর সাথে @JoinColumn বা mappedBy এনোটেশন ব্যবহার করে সম্পর্কটি নির্দিষ্ট করা হয়।


One-to-One Association এর ধরন

Hibernate-এ One-to-One Association এর দুটি প্রধান ধরন রয়েছে:

  1. Unidirectional One-to-One Association: একদিকে একে অপরের সাথে সম্পর্কিত থাকে, অর্থাৎ একটি entity অন্য entity এর প্রতি সম্পর্ক রাখে, কিন্তু অন্য entity এর কাছ থেকে সম্পর্কটি নির্ধারিত নয়।
  2. Bidirectional One-to-One Association: দুইটি entity একে অপরের সাথে সম্পর্কিত থাকে। এটি দুটি entity থেকে একে অপরকে রেফারেন্স করে, অর্থাৎ একটি entity অন্য entity এর সাথে সম্পর্ক রাখে এবং অন্য entity টিও প্রথম entity এর সাথে সম্পর্ক রাখে।

One-to-One Association Implementation

এখানে, আমরা একটি Person এবং Passport ক্লাসের মধ্যে One-to-One সম্পর্ক তৈরি করব।

Step 1: Entity Classes তৈরি করা

Person.java (Entity Class)
import javax.persistence.*;

@Entity
@Table(name = "person")
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "name")
    private String name;

    @OneToOne(mappedBy = "person", cascade = CascadeType.ALL)  // One-to-One relationship
    private Passport passport;

    // Constructors, Getters, Setters
    public Person() {}

    public Person(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Passport getPassport() {
        return passport;
    }

    public void setPassport(Passport passport) {
        this.passport = passport;
    }
}
Passport.java (Entity Class)
import javax.persistence.*;

@Entity
@Table(name = "passport")
public class Passport {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

    @Column(name = "passport_number")
    private String passportNumber;

    @OneToOne
    @JoinColumn(name = "person_id")  // Foreign key to the "person" table
    private Person person;

    // Constructors, Getters, Setters
    public Passport() {}

    public Passport(String passportNumber) {
        this.passportNumber = passportNumber;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPassportNumber() {
        return passportNumber;
    }

    public void setPassportNumber(String passportNumber) {
        this.passportNumber = passportNumber;
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}

এখানে:

  • @OneToOne(mappedBy = "person"): Person ক্লাসের passport ফিল্ডের মাধ্যমে Passport ক্লাসের সাথে one-to-one সম্পর্ক স্থাপন করা হয়েছে। mappedBy অ্যাট্রিবিউট দ্বারা Hibernate কে বলে দেয়া হচ্ছে যে, Passport ক্লাসের person ফিল্ডটি এই সম্পর্কের মালিক।
  • @JoinColumn(name = "person_id"): Passport ক্লাসে person_id নামে একটি কলাম তৈরি হবে, যা Person টেবিলের প্রাইমারি কী এর সাথে সম্পর্কিত থাকবে।

Step 2: Hibernate Configuration File (hibernate.cfg.xml)

Hibernate কনফিগারেশন ফাইলটি তৈরি করতে হয় যা Hibernate সেশন ফ্যাক্টরি সেটআপ করবে এবং ডেটাবেস সংযোগের জন্য কনফিগারেশন সরবরাহ করবে।

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- JDBC Database connection settings -->
        <property name="hibernate.connection.driver_class">org.h2.Driver</property>
        <property name="hibernate.connection.url">jdbc:h2:mem:testdb</property>
        <property name="hibernate.connection.username">sa</property>
        <property name="hibernate.connection.password"></property>

        <!-- JDBC connection pool settings -->
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">20</property>

        <!-- Specify dialect -->
        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="hibernate.current_session_context_class">thread</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="hibernate.show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hibernate.hbm2ddl.auto">update</property>

        <!-- Disable the second-level cache -->
        <property name="hibernate.cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
    </session-factory>
</hibernate-configuration>

Step 3: Hibernate SessionFactory তৈরি এবং CRUD অপারেশন

Hibernate সেশন তৈরি করে এবং Person এবং Passport এর মধ্যে One-to-One সম্পর্ক তৈরি করতে নিচের কোড ব্যবহার করা যেতে পারে।

import org.hibernate.*;
import org.hibernate.cfg.Configuration;

public class OneToOneExample {
    public static void main(String[] args) {

        // SessionFactory তৈরি করা
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
                .addAnnotatedClass(Person.class)
                .addAnnotatedClass(Passport.class)
                .buildSessionFactory();

        Session session = factory.getCurrentSession();

        try {
            // একটি নতুন Person অবজেক্ট তৈরি করা
            Person person = new Person("John Doe");

            // একটি নতুন Passport অবজেক্ট তৈরি করা
            Passport passport = new Passport("P123456789");

            // Person এবং Passport কে একে অপরের সাথে সম্পর্কিত করা
            person.setPassport(passport);
            passport.setPerson(person);

            // ট্রানজেকশন শুরু করা
            session.beginTransaction();

            // Person এবং Passport কে সেভ করা
            session.save(person);

            // ট্রানজেকশন কমিট করা
            session.getTransaction().commit();

            // Person এর Passport রিট্রিভ করা
            session = factory.getCurrentSession();
            session.beginTransaction();

            Person retrievedPerson = session.get(Person.class, person.getId());
            System.out.println("Retrieved Person: " + retrievedPerson.getName());
            System.out.println("Passport Number: " + retrievedPerson.getPassport().getPassportNumber());

            // ট্রানজেকশন কমিট করা
            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

এখানে:

  • Person এবং Passport একে অপরের সাথে One-to-One সম্পর্কিত।
  • session.save(person) ব্যবহার করে Person এবং Passport অবজেক্ট সেভ করা হচ্ছে।
  • পরে session.get(Person.class, person.getId()) ব্যবহার করে Person এবং সম্পর্কিত Passport অবজেক্ট রিট্রিভ করা হচ্ছে।

One-to-One Association এর সুবিধা

ফিচারবিবরণ
Object-Oriented MappingHibernate Java objects এবং relational tables এর মধ্যে সম্পর্ক তৈরি করতে সাহায্য করে।
Data IntegrityOne-to-One সম্পর্ক নিশ্চিত করে যে Person এবং Passport এর মধ্যে সঠিক সম্পর্ক বজায় থাকে।
Simplified CRUD OperationsCRUD অপারেশন সরাসরি Java objects এর মাধ্যমে করা যায়, যা কোড সহজ এবং কার্যকরী করে।
Cascade OperationsCascade অপশন ব্যবহার করে Person বা Passport অবজেক্ট সেভ/আপডেট/ডিলিট করতে সহজ হয়।

Hibernate-এ One-to-One Association অবজেক্ট-রিলেশনাল ম্যাপিং করার একটি গুরুত্বপূর্ণ উপায়। এটি Java objects এবং রিলেশনাল ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করতে সাহায্য করে। Hibernate এর সাহায্যে আপনি একে অপরের সাথে সম্পর্কিত দুটি entity এর মধ্যে ডেটাবেস সম্পর্ক সহজে তৈরি এবং পরিচালনা করতে পারবেন। @OneToOne, @JoinColumn, এবং mappedBy এনোটেশন ব্যবহার করে এটি কার্যকরভাবে বাস্তবায়ন করা হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...