Skill

Entity এবং Mapping

জেপিএ  (JPA) - Java Technologies

386

JPA (Java Persistence API) হল একটি স্পেসিফিকেশন যা Java প্রোগ্রামিং ভাষার মাধ্যমে রিলেশনাল ডেটাবেসের সাথে অবজেক্ট-রিলেশনাল ম্যানিপুলেশন (ORM) সমর্থন করে। Entity এবং Mapping হল JPA এর দুটি প্রধান উপাদান, যা ডেটাবেসে অবজেক্ট ম্যানিপুলেশন এবং ডেটা ম্যানিপুলেশন সহজ করে তোলে।

Entity কী?


Entity হল একটি Java ক্লাস যা একটি রিলেশনাল ডেটাবেস টেবিলের সাথে সম্পর্কিত। একটি Entity ক্লাসে @Entity অ্যানোটেশন ব্যবহার করে সেটি ডেটাবেসের টেবিল হিসেবে চিহ্নিত করা হয়। একটি Entity সাধারণত ডেটাবেস টেবিলের রেকর্ড (row) বা রেকর্ডগুলির প্রতিনিধিত্ব করে এবং এর ফিল্ডগুলো টেবিলের কলামগুলির প্রতিনিধিত্ব করে।

Entity এর উদাহরণ

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    private Long id;
    private String name;
    private int age;

    // Getter এবং Setter Method
    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

এখানে, User ক্লাসটি একটি Entity, যা ডেটাবেস টেবিলের সাথে সম্পর্কিত। @Entity অ্যানোটেশনটি নির্দেশ করে যে এটি একটি Entity ক্লাস। @Id অ্যানোটেশনটি প্রাইমারি কী কলামকে চিহ্নিত করে।

Entity Mapping:


Mapping হল সেই প্রক্রিয়া যার মাধ্যমে Java অবজেক্ট এবং রিলেশনাল ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করা হয়। JPA ক্লাসের @Entity অ্যানোটেশন ব্যবহার করে Java অবজেক্টগুলোকে ডেটাবেস টেবিলের সাথে মানানসই করে এবং @Column, @Table ইত্যাদি অ্যানোটেশন দিয়ে বিশেষ কলাম এবং টেবিলের বৈশিষ্ট্য নির্ধারণ করা হয়।

Entity Mapping এর মূল অ্যানোটেশনসমূহ:

  1. @Entity:
    • Entity ক্লাসের উপর এই অ্যানোটেশন ব্যবহার করা হয়, যা Java অবজেক্টকে ডেটাবেস টেবিলের সাথে সম্পর্কিত করে।
    • উদাহরণ:

      @Entity
      public class User { ... }
      
  2. @Id:
    • এটি প্রাইমারি কী কলামকে চিহ্নিত করে, যা ডেটাবেস টেবিলের জন্য সুনির্দিষ্ট একটি কলাম।
    • উদাহরণ:

      @Id
      private Long id;
      
  3. @GeneratedValue:
    • এটি id বা অন্যান্য প্রপার্টির অটোমেটিক ভ্যালু জেনারেট করতে ব্যবহৃত হয়।
    • উদাহরণ:

      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
      
  4. @Column:
    • এটি একটি ক্লাসের প্রপার্টি এবং টেবিলের কলামের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। এর মাধ্যমে টেবিলের কলামের নাম, ডেটা টাইপ ইত্যাদি নির্ধারণ করা যায়।
    • উদাহরণ:

      @Column(name = "user_name")
      private String name;
      
  5. @Table:
    • এটি Entity ক্লাসের সাথে সম্পর্কিত টেবিলের নাম নির্ধারণ করতে ব্যবহৃত হয়।
    • উদাহরণ:

      @Entity
      @Table(name = "users")
      public class User { ... }
      
  6. @OneToMany, @ManyToOne, @ManyToMany:
    • JPA তে বিভিন্ন Entity এর মধ্যে সম্পর্ক তৈরি করতে এই অ্যানোটেশনগুলি ব্যবহৃত হয়। উদাহরণস্বরূপ:
      • @OneToMany: একটি Entity এর সাথে অনেক Entity সম্পর্ক।
      • @ManyToOne: অনেক Entity এর সাথে এক Entity সম্পর্ক।
      • @ManyToMany: অনেক Entity এর সাথে অনেক Entity সম্পর্ক।
    • উদাহরণ:

      @OneToMany(mappedBy = "user")
      private List<Order> orders;
      

Table Mapping Example:


import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

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

    @Column(name = "user_age")
    private int age;

    // Getter and Setter methods
}

এখানে:

  • @Entity: User ক্লাসটি একটি Entity হিসেবে চিহ্নিত করা হয়েছে।
  • @Table(name = "users"): users নামক টেবিলের সাথে Entity এর সম্পর্ক স্থাপন করা হয়েছে।
  • @Column(name = "user_name"): name ফিল্ডটিকে টেবিলের user_name কলামের সাথে ম্যাপ করা হয়েছে।
  • @GeneratedValue(strategy = GenerationType.IDENTITY): id প্রপার্টির জন্য অটোমেটিক ভ্যালু জেনারেট করা হচ্ছে।

Relationship Mapping in JPA


JPA তে Entity গুলির মধ্যে সম্পর্ক প্রতিষ্ঠা করার জন্য OneToMany, ManyToOne, ManyToMany অ্যানোটেশন ব্যবহার করা হয়। এটি ডেটাবেসের সম্পর্কিত টেবিলগুলির মধ্যে সম্পর্ক নির্ধারণ করে।

OneToMany Relationship Example

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(mappedBy = "user")
    private List<Order> orders;
}

@Entity
public class Order {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String product;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
}

এখানে, User Entity এর সাথে একাধিক Order Entity সম্পর্কিত, যেখানে OneToMany এবং ManyToOne অ্যানোটেশন ব্যবহার করা হয়েছে।

JPA Query Language (JPQL)


JPA এর জন্য JPQL (Java Persistence Query Language) হল একটি কুয়েরি ভাষা যা SQL এর মতো দেখায় তবে এটি Java অবজেক্টের ওপর ভিত্তি করে কাজ করে, টেবিলের উপর নয়।

JPQL Example:

TypedQuery<User> query = entityManager.createQuery("SELECT u FROM User u WHERE u.age > 25", User.class);
List<User> users = query.getResultList();

এখানে, JPQL কুয়েরি ব্যবহার করে User Entity এর Age বড় হতে ২৫ এর চেয়ে বেশি এমন ব্যবহারকারীদের তথ্য নেয়া হচ্ছে।


সার্বিক পর্যালোচনা


JPA Entity এবং Mapping একটি অত্যন্ত গুরুত্বপূর্ণ অংশ যা ডেভেলপারদের জন্য রিলেশনাল ডেটাবেসের সাথে Java অবজেক্টগুলির সম্পর্ক স্থাপন সহজ করে দেয়। Entity ক্লাস এবং Mapping এর মাধ্যমে ডেটাবেসের টেবিল এবং কলামের সাথে Java অবজেক্টগুলোকে মেপ করা হয়। JPA এর শক্তিশালী ORM সমাধান ডেটাবেস অপারেশনগুলো স্বয়ংক্রিয় এবং সহজ করে তোলে, এবং এর মাধ্যমে Java ডেভেলপাররা কার্যকরীভাবে ডেটাবেসের সাথে ইন্টারঅ্যাকশন করতে পারেন।

Content added By

JPA Entity Class হল একটি Java ক্লাস যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করে এবং এতে ডেটাবেস টেবিলের রেকর্ডগুলির জন্য প্রোপার্টি থাকে। JPA Entity ক্লাস তৈরি করার মাধ্যমে আপনি ডেটাবেসের টেবিলের সঙ্গে Java অবজেক্টের সম্পর্ক স্থাপন করতে পারবেন এবং সহজেই ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে পারবেন। এই ক্লাসে কিছু গুরুত্বপূর্ণ অ্যানোটেশন ব্যবহার করতে হয়, যেমন @Entity, @Id, @GeneratedValue, @Column, ইত্যাদি।

JPA Entity Class তৈরি করার প্রক্রিয়া


1. @Entity অ্যানোটেশন ব্যবহার করা
প্রথমত, Entity ক্লাসের উপরে @Entity অ্যানোটেশন ব্যবহার করতে হবে, যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করবে।

2. @Id অ্যানোটেশন ব্যবহার করা
প্রত্যেক Entity ক্লাসে একটি প্রাইমারি কী (primary key) থাকতে হবে, এবং সেই প্রপার্টির উপরে @Id অ্যানোটেশন ব্যবহার করতে হবে।

3. @GeneratedValue অ্যানোটেশন ব্যবহার করা
প্রাইমারি কী যদি অটোমেটিকভাবে জেনারেট হয় (যেমন, ইনক্রিমেন্ট হিসেবে), তবে @GeneratedValue অ্যানোটেশন ব্যবহার করা হয়।

4. @Column অ্যানোটেশন ব্যবহার করা (অপশনাল)
যদি টেবিলের কলামের নাম Java প্রোপার্টির নামের সাথে মেলে না, তাহলে @Column অ্যানোটেশন ব্যবহার করা হয়। এটি ডেটাবেস টেবিলের কলামের নাম নির্ধারণ করে।

উদাহরণ: JPA Entity Class

ধরা যাক, আমাদের একটি Employee টেবিল তৈরি করতে হবে, যার মধ্যে id, name, salary, এবং department ফিল্ড থাকবে। এই টেবিলের জন্য Entity ক্লাসটি নিম্নরূপ হবে:

Employee Entity Class:

import javax.persistence.*;

@Entity // Entity ক্লাস হিসেবে ঘোষণা
@Table(name = "employee") // ডেটাবেস টেবিলের নাম (অপশনাল)
public class Employee {

    @Id // প্রাইমারি কী
    @GeneratedValue(strategy = GenerationType.IDENTITY) // অটোমেটিক প্রাইমারি কী জেনারেশন
    @Column(name = "id") // টেবিলের কলামের নাম
    private Long id;

    @Column(name = "name", nullable = false) // টেবিলের কলাম 'name'
    private String name;

    @Column(name = "salary")
    private double salary;

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

    // ডিফল্ট কনস্ট্রাক্টর
    public Employee() {}

    // প্যারামিটারাইজড কনস্ট্রাক্টর
    public Employee(String name, double salary, String department) {
        this.name = name;
        this.salary = salary;
        this.department = department;
    }

    // Getter এবং Setter মেথড
    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 double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }
}

Entity ক্লাসের প্রধান অ্যানোটেশনগুলি:


  1. @Entity:
    এটি ক্লাসকে Entity হিসেবে চিহ্নিত করে, যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করবে। যদি Entity ক্লাসে @Entity অ্যানোটেশন না থাকে, তাহলে JPA বুঝবে এটি ডেটাবেস টেবিলের সঙ্গে সম্পর্কিত নয়।
  2. @Id:
    এটি সেই প্রপার্টিকে চিহ্নিত করে যা ডেটাবেস টেবিলের প্রাইমারি কী হবে।
  3. @GeneratedValue:
    এই অ্যানোটেশনটি প্রাইমারি কীকে অটোমেটিকভাবে জেনারেট করার জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ, GenerationType.IDENTITY ব্যবহার করলে প্রাইমারি কীটি ইনক্রিমেন্টাল হবে।
  4. @Column:
    এই অ্যানোটেশনটি প্রতিটি Entity প্রপার্টির সাথে টেবিলের কলাম সম্পর্ক স্থাপন করে। আপনি এর মাধ্যমে টেবিলের কলামের নাম, ডেটাটাইপ, nullable ইত্যাদি কনফিগার করতে পারেন।
  5. @Table:
    টেবিলের নাম স্পেসিফাই করতে এই অ্যানোটেশনটি ব্যবহার করা হয়। যদি ক্লাসের নাম ডেটাবেস টেবিলের নামের সাথে মেলে, তবে এই অ্যানোটেশনটি ঐচ্ছিক।

JPA Entity Class এর সাথে সম্পর্কিত কনসেপ্টস:


  1. EntityManager:
    JPA এর প্রধান API হল EntityManager। EntityManager ব্যবহার করে আপনি Entity অবজেক্টকে ডেটাবেসে সেভ, আপডেট, ডিলিট এবং ফাইন্ড করতে পারেন।

    উদাহরণ:

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJpaUnit");
    EntityManager em = emf.createEntityManager();
    
    em.getTransaction().begin();
    
    Employee employee = new Employee("John Doe", 50000, "IT");
    em.persist(employee); // Persisting the employee object to the database
    
    em.getTransaction().commit();
    em.close();
    
  2. JPQL (Java Persistence Query Language):
    JPA এ কুয়েরি করার জন্য JPQL ব্যবহার করা হয়। এটি SQL এর মতো হলেও এটি Entity ক্লাসের উপর কাজ করে, ডেটাবেস টেবিলের উপর নয়।

    উদাহরণ:

    String query = "SELECT e FROM Employee e WHERE e.salary > :salary";
    TypedQuery<Employee> typedQuery = em.createQuery(query, Employee.class);
    typedQuery.setParameter("salary", 40000);
    List<Employee> employees = typedQuery.getResultList();
    
  3. Entity Lifecycle:
    JPA Entity অবজেক্টের বিভিন্ন লাইফসাইকেল স্টেট রয়েছে, যেমন New, Managed, Detached, এবং Removed। EntityManager এর মাধ্যমে অবজেক্টগুলোর লাইফসাইকেল পরিচালনা করা হয়।

সারাংশ


JPA Entity Class তৈরি করা হল Java ক্লাসগুলিকে ডেটাবেস টেবিলের সঙ্গে সম্পর্কিত করার একটি প্রক্রিয়া। এই ক্লাসে @Entity, @Id, @GeneratedValue, এবং @Column এর মতো অ্যানোটেশন ব্যবহার করা হয়, যা ডেটাবেস টেবিলের কলামগুলির সাথে Java অবজেক্টের প্রপার্টি ম্যাপ করে। JPA Entity ব্যবহারের মাধ্যমে ডেটাবেস অপারেশন সহজে পরিচালিত হয় এবং Java অ্যাপ্লিকেশন ও ডেটাবেসের মধ্যে একটি দৃঢ় সংযোগ স্থাপন করা হয়।

Content added By

JPA (Java Persistence API) হল একটি API যা Java প্রোগ্রামিং ভাষার মাধ্যমে রিলেশনাল ডেটাবেসে ডেটা সঞ্চালন, মানিপুলেশন এবং রিলেশনাল ডেটাবেসের সাথে অবজেক্ট-রিলেশনাল মডেলিং (ORM) করতে সাহায্য করে। JPA এ @Entity এবং @Table এনোটেশন দুটি প্রধান উপাদান যা Java ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়।

@Entity এনোটেশন


@Entity অ্যানোটেশনটি JPA এর জন্য একটি বিশেষ অ্যানোটেশন যা ক্লাসকে একটি Entity হিসেবে চিহ্নিত করে। এটি নির্দেশ করে যে, এই ক্লাসটি একটি ডেটাবেস টেবিলের প্রতিনিধিত্ব করবে এবং এটি ডেটাবেসে সঞ্চিত থাকবে।

@Entity এর বৈশিষ্ট্য:

  1. @Entity ব্যবহার করা হলে, Java ক্লাসটি একটি ডেটাবেস টেবিলের সাথে যুক্ত হবে।
  2. এই ক্লাসের মধ্যে থাকা ফিল্ডগুলো ডেটাবেস টেবিলের কলামগুলির প্রতিনিধিত্ব করবে।
  3. একটি Entity ক্লাসে কমপক্ষে একটি @Id অ্যানোটেশন থাকতে হবে, যা ক্লাসের প্রাইমারি কী কলাম নির্ধারণ করে।

@Entity উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {
    
    @Id
    private Long id;
    private String name;
    private int age;

    // Getter এবং Setter Method
    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

এখানে, User ক্লাসটি @Entity অ্যানোটেশন ব্যবহার করে ডেটাবেসের user টেবিলের প্রতিনিধিত্ব করছে। id ফিল্ডটি ডেটাবেসের প্রাইমারি কী হবে, কারণ এখানে @Id অ্যানোটেশন রয়েছে।

@Table এনোটেশন


@Table অ্যানোটেশনটি @Entity এর সাথে ব্যবহৃত হয় এবং এটি Entity ক্লাসের সাথে সম্পর্কিত ডেটাবেস টেবিলের নাম নির্ধারণ করে। @Table এর মাধ্যমে আপনি টেবিলের নাম, স্কিমা, এবং অন্যান্য বৈশিষ্ট্য কাস্টমাইজ করতে পারেন।

@Table এর বৈশিষ্ট্য:

  1. @Table অ্যানোটেশনটি ডেটাবেস টেবিলের নাম এবং অন্যান্য বৈশিষ্ট্য কাস্টমাইজ করতে ব্যবহৃত হয়।
  2. আপনি চাইলে টেবিলের নাম সঠিকভাবে @Table(name = "table_name") এর মাধ্যমে প্রদান করতে পারেন।
  3. যদি @Table ব্যবহার না করা হয়, তবে JPA Entity ক্লাসের নামের সাথে অটোমেটিকভাবে টেবিলের নাম তৈরি হয়।

@Table উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "users")
public class User {

    @Id
    private Long id;
    private String name;
    private int age;

    // Getter এবং Setter Method
    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

এখানে, @Table(name = "users") অ্যানোটেশনটি Entity ক্লাস User কে ডেটাবেসের users টেবিলের সাথে সম্পর্কিত করেছে।

অতিরিক্ত @Table বৈশিষ্ট্য:

  1. schema: টেবিলের স্কিমা নির্ধারণ করতে ব্যবহৃত হয়।

    @Table(name = "users", schema = "public")
    
  2. uniqueConstraints: টেবিলের জন্য একাধিক ইউনিক কনস্ট্রেইন্ট নির্ধারণ করতে ব্যবহৃত হয়।

    @Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
    

@Entity এবং @Table এর সম্পর্ক:


  • @Entity: Java ক্লাসটিকে একটি Entity হিসেবে চিহ্নিত করে, যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করবে।
  • @Table: @Entity এর সাথে সম্পর্কিত টেবিলের নাম নির্ধারণ করতে ব্যবহৃত হয়।

@Entity অ্যানোটেশন ব্যবহার করা হলে, ডেটাবেস টেবিলের নাম যদি @Table অ্যানোটেশন দিয়ে না দেয়া হয়, তাহলে JPA ডিফল্টভাবে Entity ক্লাসের নামের উপর ভিত্তি করে টেবিলের নাম নির্ধারণ করবে। তবে, @Table ব্যবহার করে আপনি টেবিলের নাম এবং অন্যান্য বৈশিষ্ট্য কাস্টমাইজ করতে পারেন।


সার্বিক পর্যালোচনা


@Entity এবং @Table এনোটেশনগুলি JPA (Java Persistence API) এর গুরুত্বপূর্ণ অংশ। @Entity একটি Java ক্লাসকে ডেটাবেস টেবিলের সাথে সম্পর্কিত Entity হিসেবে চিহ্নিত করে, এবং @Table অ্যানোটেশন ব্যবহার করে Entity ক্লাসটির সাথে সম্পর্কিত টেবিলের নাম ও অন্যান্য বৈশিষ্ট্য কাস্টমাইজ করা হয়। এই অ্যানোটেশনগুলি JPA এর ORM সমাধান ব্যবহারের মাধ্যমে ডেটাবেসের সাথে Java অবজেক্টগুলোর সম্পর্ক স্থাপন এবং ডেটাবেস অপারেশন সহজতর করতে সাহায্য করে।

Content added By

Primary Key (PK) একটি টেবিলের প্রতিটি রেকর্ডকে এককভাবে চিহ্নিত করতে ব্যবহৃত একটি গুরুত্বপূর্ণ উপাদান। JPA (Java Persistence API) ব্যবহার করে, Entity ক্লাসের জন্য Primary Key নির্ধারণ করা হয়, যাতে ডেটাবেসে প্রতিটি রেকর্ডের জন্য একটি ইউনিক আইডেন্টিফায়ার থাকে। JPA এর মধ্যে এটি @Id এবং @GeneratedValue অ্যানোটেশন ব্যবহার করে করা হয়।

JPA Entity এবং Primary Key


JPA Entity হলো একটি Java ক্লাস যা ডেটাবেসের টেবিলের সাথে মিলে, এবং এর ক্ষেত্রগুলো টেবিলের কলাম হিসেবে ম্যাপ করা হয়। Primary Key টেবিলের জন্য একটি ইউনিক আইডেন্টিফায়ার হিসেবে কাজ করে এবং এটি Entity ক্লাসের মধ্যে @Id অ্যানোটেশন ব্যবহার করে সেট করা হয়।

@Id অ্যানোটেশন


@Id অ্যানোটেশন ব্যবহার করা হয় Entity ক্লাসের এমন একটি ফিল্ডের জন্য, যা ডেটাবেসের টেবিলের Primary Key হিসেবে কাজ করবে।

উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    private Long id;  // This is the Primary Key

    private String name;
    private int age;

    // Getter and Setter methods
    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

এখানে, id ফিল্ডকে Primary Key হিসেবে চিহ্নিত করার জন্য @Id অ্যানোটেশন ব্যবহার করা হয়েছে।

@GeneratedValue অ্যানোটেশন


যখন Primary Key এর মান স্বয়ংক্রিয়ভাবে ডেটাবেস দ্বারা তৈরি করতে হয়, তখন @GeneratedValue অ্যানোটেশন ব্যবহার করা হয়। এটি মূলত Primary Key এর মান ডেটাবেসে auto-generated বা automatically generated করতে সাহায্য করে।

@GeneratedValue অ্যানোটেশন দিয়ে আপনি কীভাবে Primary Key জেনারেট হবে তা নির্ধারণ করতে পারেন। এটি GenerationType এর মাধ্যমে কনফিগার করা যায়, যেমন:

  • GenerationType.IDENTITY: ডেটাবেসের জন্য Auto Increment ব্যবহার করা হয় (সাধারণত MySQL বা PostgreSQL তে)।
  • GenerationType.SEQUENCE: সিকোয়েন্স থেকে মান নেওয়া হয় (বিশেষত Oracle ডেটাবেসে)।
  • GenerationType.TABLE: একটি টেবিল ব্যবহার করে মান জেনারেট করা হয়।

@GeneratedValue উদাহরণ

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)  // Primary Key will be auto-generated
    private Long id;  // This is the Primary Key

    private String name;
    private int age;

    // Getter and Setter methods
    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

এখানে, @GeneratedValue(strategy = GenerationType.IDENTITY) ব্যবহার করে ডেটাবেসের Auto Increment ফিচার ব্যবহার করা হয়েছে। এর মাধ্যমে ডেটাবেসের আইডি ফিল্ডটি স্বয়ংক্রিয়ভাবে পূর্ণ হবে।

Primary Key Generation Types


@GeneratedValue এর মধ্যে strategy প্যারামিটার দিয়ে ডেটাবেসে Primary Key এর মান কীভাবে জেনারেট হবে তা নিয়ন্ত্রণ করা যায়। এর বিভিন্ন ধরণ রয়েছে:

1. GenerationType.IDENTITY

  • ডেটাবেসে auto-increment ফিচার ব্যবহার করা হয়।
  • সাধারণত MySQL এবং PostgreSQL এ ব্যবহৃত হয়।
@GeneratedValue(strategy = GenerationType.IDENTITY)

2. GenerationType.SEQUENCE

  • একটি সিকোয়েন্স টেবিল থেকে মান বের করে জেনারেট করা হয়।
  • এটি সাধারণত Oracle ডেটাবেসে ব্যবহৃত হয়।
@GeneratedValue(strategy = GenerationType.SEQUENCE)

3. GenerationType.TABLE

  • একটি টেবিল থেকে সিকোয়েন্স তৈরি করা হয় যা Primary Key এর মান জেনারেট করে।
  • এটি ডেটাবেসের নির্দিষ্ট টেবিল ব্যবহার করে কাজ করে।
@GeneratedValue(strategy = GenerationType.TABLE)

4. GenerationType.AUTO

  • JPA এর ডিফল্ট আচরণ। ডেটাবেসের ক্ষমতা অনুযায়ী এই স্ট্রাটেজি নির্বাচন করে। যদি ডেটাবেস auto-increment সাপোর্ট করে, তবে IDENTITY স্ট্রাটেজি ব্যবহার হবে, অন্যথায় SEQUENCE বা TABLE ব্যবহার হতে পারে।
@GeneratedValue(strategy = GenerationType.AUTO)

সারাংশ


  • @Id অ্যানোটেশন JPA Entity এর Primary Key ক্ষেত্র চিহ্নিত করার জন্য ব্যবহৃত হয়।
  • @GeneratedValue অ্যানোটেশন ব্যবহার করে Primary Key এর মান স্বয়ংক্রিয়ভাবে ডেটাবেস দ্বারা তৈরি করা হয়।
  • GenerationType এর মাধ্যমে আপনি Primary Key এর মান কীভাবে জেনারেট হবে তা কনফিগার করতে পারেন, যেমন IDENTITY, SEQUENCE, TABLE, অথবা AUTO

এই দুটি অ্যানোটেশন ব্যবহার করে আপনি Primary Key সেট এবং কাস্টমাইজ করতে পারেন, যা আপনার JPA অ্যাপ্লিকেশনের ডেটাবেস মডেলকে আরো কার্যকরী এবং সহজে পরিচালনাযোগ্য করে তোলে।

Content added By

JPA (Java Persistence API) ব্যবহার করার সময়, @Column এনোটেশনটি Java অবজেক্টের ফিল্ড (field) এবং ডেটাবেস টেবিলের কলাম (column) এর মধ্যে সম্পর্ক তৈরি করতে ব্যবহৃত হয়। এটি মূলত একটি ফিল্ডের জন্য একটি নির্দিষ্ট ডেটাবেস কলামকে মানচিত্র (map) করে, যাতে JPA নিশ্চিত করতে পারে যে Java অবজেক্টের ফিল্ডটি ডেটাবেসের ঠিক কোন কলামে সংরক্ষিত হবে।

@Column এনোটেশনটি @Entity শ্রেণীর মধ্যে ব্যবহৃত হয়, এবং এটি ডেটাবেস টেবিলের সাথে অবজেক্ট-রিলেশনাল ম্যাপিং (ORM) করার জন্য গুরুত্বপূর্ণ। JPA এর মধ্যে @Column এনোটেশন প্রয়োগ করে আপনি বিভিন্ন বৈশিষ্ট্য কনফিগার করতে পারেন যেমন কলামের নাম, ডেটা টাইপ, দৈর্ঘ্য, অপরিবর্তনীয়তা (nullable) এবং আরও অনেক কিছু।

@Column এনোটেশন এর সাধারণ ব্যবহার


@Column এনোটেশনটি ফিল্ডের উপরে ব্যবহার করা হয় এবং এটি ডেটাবেস টেবিলের কলামের সাথে Java ফিল্ডকে সম্পর্কিত করে। এর মাধ্যমে ডেটাবেসের কলামের নাম, প্রকার, দৈর্ঘ্য ইত্যাদি নির্ধারণ করা যায়।

সিনট্যাক্স:

@Column(name = "column_name", nullable = false, length = 100, unique = true)
private String fieldName;

এখানে,

  • name: ডেটাবেস টেবিলের কলামের নাম।
  • nullable: যদি এটি false থাকে, তবে ওই কলামে null মান থাকতে পারবে না।
  • length: স্ট্রিং টাইপ কলামের জন্য দৈর্ঘ্য নির্ধারণ করা হয়।
  • unique: কলামের মান ইউনিক (অন্য সবার থেকে আলাদা) হবে কিনা তা নির্ধারণ করে।

@Column এনোটেশন এর ব্যবহার উদাহরণ


ধরা যাক, আপনার একটি User নামক JPA Entity রয়েছে এবং আপনি সেই অবজেক্টের ফিল্ডগুলো ডেটাবেস টেবিলের কলামে ম্যাপ করতে চান।

@Column এনোটেশন ব্যবহার করে একটি ক্লাসের উদাহরণ

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    private Long id;

    @Column(name = "first_name", nullable = false, length = 50)
    private String firstName;

    @Column(name = "last_name", nullable = false, length = 50)
    private String lastName;

    @Column(name = "email", unique = true, nullable = false)
    private String email;

    // Getters and Setters
    public Long getId() {
        return id;
    }

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

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

ব্যাখ্যা:

  • @Id: id ফিল্ডটি ডেটাবেসের টেবিলের প্রাইমারি কী হিসেবে কাজ করবে।
  • @Column(name = "first_name", nullable = false, length = 50): firstName ফিল্ডটি ডেটাবেস টেবিলের first_name কলামে ম্যাপ হবে। এই কলামে null মান গ্রহণ করা যাবে না এবং এর দৈর্ঘ্য 50 অক্ষর হবে।
  • @Column(name = "email", unique = true, nullable = false): email ফিল্ডটি ডেটাবেস টেবিলের email কলামে ম্যাপ হবে, এই কলামে ইউনিক ভ্যালু থাকতে হবে এবং null থাকতে পারবে না।

@Column এনোটেশন এর অন্যান্য অপশন


JPA এর @Column এনোটেশনটি আরও কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য সমর্থন করে:

  • insertable: এটি যদি false হয়, তবে JPA ঐ ফিল্ডের জন্য ডেটাবেসে ইনসার্ট অপারেশন করবে না।

    @Column(insertable = false)
    private String fieldName;
    
  • updatable: এটি যদি false হয়, তবে JPA ঐ ফিল্ডের জন্য ডেটাবেসে আপডেট অপারেশন করবে না।

    @Column(updatable = false)
    private String fieldName;
    
  • columnDefinition: এটি কলামের জন্য ডেটাবেসে কাস্টম SQL ডিফিনেশন প্রদান করতে ব্যবহৃত হয়। এটি সাধারণত ডেটাবেস স্কিমা কাস্টমাইজেশনের জন্য ব্যবহার করা হয়।

    @Column(columnDefinition = "VARCHAR(100) DEFAULT 'N/A'")
    private String fieldName;
    
  • precision এবং scale: এই অপশনগুলি সংখ্যা (numeric) কলামগুলির জন্য ব্যবহৃত হয়, যেখানে precision (মোট ডিজিট) এবং scale (ডেসিমাল পয়েন্টের পরে ডিজিট) নির্ধারণ করা হয়।

    @Column(precision = 10, scale = 2)
    private BigDecimal price;
    

@Column এনোটেশন ব্যবহার করার সুবিধা


  1. স্পষ্ট ম্যাপিং: @Column এনোটেশন ব্যবহার করে ডেটাবেস টেবিলের কলামগুলির সাথে Java ক্লাসের ফিল্ডগুলির স্পষ্ট সম্পর্ক তৈরি করা যায়, যা কোডের রিডেবিলিটি উন্নত করে।
  2. ডেটাবেস কাস্টমাইজেশন: ডেটাবেস কলামগুলির জন্য কাস্টম নাম, ডেটা টাইপ, লেন্থ এবং অন্যান্য প্রোপার্টি নির্ধারণ করার সুবিধা প্রদান করে।
  3. এনোটেশন ভিত্তিক কনফিগারেশন: XML কনফিগারেশন ছাড়াই ডেটাবেস টেবিলের কনফিগারেশন করা যায়, যা Java কোডের মধ্যে সরাসরি অন্তর্ভুক্ত থাকে।
  4. ফিল্ডের জন্য রেস্ট্রিকশন: nullable, unique, length ইত্যাদি অপশন ব্যবহার করে ফিল্ডের জন্য রেস্ট্রিকশন বা শর্ত নির্ধারণ করা যায়।

সারাংশ


@Column এনোটেশন JPA এর একটি গুরুত্বপূর্ণ অংশ যা Java অবজেক্টের ফিল্ডগুলির সাথে ডেটাবেস টেবিলের কলামগুলোকে ম্যাপ করার জন্য ব্যবহৃত হয়। এটি ডেটাবেসের কাঠামো এবং Java কোডের মধ্যে সুসংগত সম্পর্ক তৈরি করতে সাহায্য করে, ফলে ডেটাবেস অপারেশন আরও সহজ, দ্রুত এবং কার্যকরী হয়। @Column এর মাধ্যমে ডেটাবেস কলামের নাম, টাইপ, দৈর্ঘ্য, ইউনিক বা নালযোগ্যতা নির্ধারণ করা যায় এবং এর মাধ্যমে ডেটাবেসের মানচিত্রে স্পষ্টতা আনা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...