Entity Read করা (Retrieve/Find)

JPA তে CRUD অপারেশন - জেপিএ  (JPA) - Java Technologies

349

JPA (Java Persistence API) ব্যবহার করে ডেটাবেস থেকে Entity অবজেক্ট রিট্রিভ (Retrieve) করা বা ফাইন্ড (Find) করার প্রক্রিয়া সহজ এবং শক্তিশালী। JPA আপনাকে SQL ব্যবহার না করে, শুধুমাত্র Java অবজেক্টের মাধ্যমে ডেটাবেসের তথ্য রিট্রিভ করতে সক্ষম করে।

JPA এর EntityManager ক্লাসটি ডেটাবেসের টেবিল থেকে Entity অবজেক্ট রিট্রিভ করার জন্য ব্যবহৃত হয়। এটি বিভিন্ন মেথড প্রদান করে, যেমন find(), getReference(), createQuery() ইত্যাদি, যার মাধ্যমে আপনি Entity এর ডেটা রিট্রিভ করতে পারবেন।

এখানে আমরা Entity Read বা Retrieve করার জন্য JPA এর বিভিন্ন মেথড ব্যবহার করার উদাহরণ দেখব।


১. find() মেথড ব্যবহার করে Entity রিট্রিভ করা

JPA এর find() মেথড ব্যবহার করে আপনি ডেটাবেস থেকে নির্দিষ্ট primary key এর মাধ্যমে Entity রিট্রিভ করতে পারবেন।

find() মেথডের উদাহরণ:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.example.model.Person;

public class JpaFindExample {
    public static void main(String[] args) {
        // Create EntityManagerFactory and EntityManager
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJPAUnit");
        EntityManager em = emf.createEntityManager();
        
        // Retrieve entity by ID using find() method
        Person person = em.find(Person.class, 1L);  // Find person by primary key (id)
        
        if (person != null) {
            System.out.println("Person Found: " + person.getName() + ", Age: " + person.getAge());
        } else {
            System.out.println("Person not found.");
        }

        // Close EntityManager and EntityManagerFactory
        em.close();
        emf.close();
    }
}

Explanation:

  • em.find(): find() মেথড EntityManager দ্বারা Entity অবজেক্টকে রিটার্ন করে। এই মেথডটি ডেটাবেসের প্রাইমারি কি (id) ব্যবহার করে Entity খুঁজে বের করে।
  • এখানে 1L দিয়ে id দেওয়া হয়েছে, অর্থাৎ ডেটাবেস থেকে id = 1 এর Person অবজেক্ট রিট্রিভ করা হবে।

২. getReference() মেথড ব্যবহার করে Entity রিট্রিভ করা

getReference() মেথডটি lazy loading কৌশল ব্যবহার করে Entity রিট্রিভ করে। এটি শুধুমাত্র proxy object রিটার্ন করে এবং Entity এর আসল ডেটা তখনই লোড হয় যখন প্রকৃত ডেটার প্রয়োজন পড়ে (যেমন, যখন কোন ফিল্ড অ্যাক্সেস করা হয়)।

getReference() মেথডের উদাহরণ:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.example.model.Person;

public class JpaGetReferenceExample {
    public static void main(String[] args) {
        // Create EntityManagerFactory and EntityManager
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJPAUnit");
        EntityManager em = emf.createEntityManager();
        
        // Retrieve entity by ID using getReference() method (Lazy Loading)
        Person person = em.getReference(Person.class, 1L);  // Get reference of person by primary key (id)
        
        System.out.println("Person Reference: " + person.getClass().getName()); // Lazy loading happens here

        // Close EntityManager and EntityManagerFactory
        em.close();
        emf.close();
    }
}

Explanation:

  • em.getReference(): এটি lazy loading এর মাধ্যমে Entity রিট্রিভ করে। এখানে প্রথমে proxy object তৈরি হয়, এবং পরে যদি আপনি Entity এর কোনো ফিল্ড অ্যাক্সেস করেন, তখন আসল ডেটা লোড হয়।

৩. JPQL (Java Persistence Query Language) ব্যবহার করে Entity রিট্রিভ করা

JPA একটি শক্তিশালী কুয়েরি ভাষা JPQL (Java Persistence Query Language) প্রদান করে, যা Entity এর ভিত্তিতে ডেটা রিট্রিভ করতে ব্যবহার করা হয়। JPQL ব্যবহার করে আপনি সাধারণ SQL এর মতো কুয়েরি লিখতে পারেন, তবে এটি Java অবজেক্টে কাজ করে, টেবিলের সাথে নয়।

JPQL উদাহরণ:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import com.example.model.Person;
import java.util.List;

public class JpaJPQLExample {
    public static void main(String[] args) {
        // Create EntityManagerFactory and EntityManager
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJPAUnit");
        EntityManager em = emf.createEntityManager();
        
        // JPQL query to retrieve all Person entities
        String jpql = "SELECT p FROM Person p WHERE p.age > 25";
        Query query = em.createQuery(jpql);
        
        List<Person> personList = query.getResultList();
        
        for (Person person : personList) {
            System.out.println("Person: " + person.getName() + ", Age: " + person.getAge());
        }

        // Close EntityManager and EntityManagerFactory
        em.close();
        emf.close();
    }
}

Explanation:

  • JPQL Query: SELECT p FROM Person p WHERE p.age > 25 একটি JPQL কুয়েরি যা Person Entity থেকে বয়সের ভিত্তিতে ডেটা রিট্রিভ করে।
  • query.getResultList(): কুয়েরি রেজাল্টের তালিকা (List) রিটার্ন করে।

৪. Named Queries ব্যবহার করে Entity রিট্রিভ করা

JPA তে Named Queries ব্যবহার করে আগেই ডিফাইন করা কুয়েরি ব্যবহার করা যায়। এটি কুয়েরি লেখার সময় ভুল কমপ্লেক্সিটি কমাতে সাহায্য করে এবং সহজেই পুনঃব্যবহারযোগ্য কুয়েরি তৈরি করতে সাহায্য করে।

Named Query উদাহরণ:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.example.model.Person;
import javax.persistence.TypedQuery;

public class JpaNamedQueryExample {
    public static void main(String[] args) {
        // Create EntityManagerFactory and EntityManager
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJPAUnit");
        EntityManager em = emf.createEntityManager();
        
        // Execute Named Query
        TypedQuery<Person> query = em.createNamedQuery("Person.findAll", Person.class);
        List<Person> result = query.getResultList();
        
        for (Person person : result) {
            System.out.println("Person: " + person.getName() + ", Age: " + person.getAge());
        }

        // Close EntityManager and EntityManagerFactory
        em.close();
        emf.close();
    }
}

Named Query Definition (in Entity class):

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

@Entity
@NamedQuery(name = "Person.findAll", query = "SELECT p FROM Person p")
public class Person {
    @Id
    private Long id;
    private String name;
    private int age;
    
    // Getters and Setters
}

Explanation:

  • NamedQuery: Person.findAll নামে একটি কুয়েরি ডিফাইন করা হয়েছে যা Person Entity এর সব রেকর্ড রিটার্ন করবে।
  • createNamedQuery(): এটি পূর্বনির্ধারিত নামযুক্ত কুয়েরি চালানোর জন্য ব্যবহৃত হয়।

সারাংশ


JPA তে Entity রিট্রিভ করার জন্য বিভিন্ন পদ্ধতি ব্যবহার করা যেতে পারে, যেমন find(), getReference(), JPQL এবং Named Queries

  • find() মেথডটি ডেটাবেস থেকে একটি Entity অবজেক্ট রিটার্ন করে, যেখানে প্রাইমারি কি ব্যবহার করা হয়।
  • getReference() মেথডটি lazy loading পদ্ধতিতে Entity রিটার্ন করে, যেখানে ডেটা শুধুমাত্র প্রয়োজনের সময় লোড হয়।
  • JPQL এবং Named Queries ব্যবহার করে জটিল কুয়েরি লেখার মাধ্যমে আপনি ডেটাবেসের ডেটা কার্যকরভাবে রিট্রিভ করতে পারেন।

এগুলি আপনার JPA ডেভেলপমেন্টকে আরও শক্তিশালী এবং কার্যকরী করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...