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 কুয়েরি যাPersonEntity থেকে বয়সের ভিত্তিতে ডেটা রিট্রিভ করে। 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নামে একটি কুয়েরি ডিফাইন করা হয়েছে যাPersonEntity এর সব রেকর্ড রিটার্ন করবে। createNamedQuery(): এটি পূর্বনির্ধারিত নামযুক্ত কুয়েরি চালানোর জন্য ব্যবহৃত হয়।
সারাংশ
JPA তে Entity রিট্রিভ করার জন্য বিভিন্ন পদ্ধতি ব্যবহার করা যেতে পারে, যেমন find(), getReference(), JPQL এবং Named Queries।
find()মেথডটি ডেটাবেস থেকে একটি Entity অবজেক্ট রিটার্ন করে, যেখানে প্রাইমারি কি ব্যবহার করা হয়।getReference()মেথডটি lazy loading পদ্ধতিতে Entity রিটার্ন করে, যেখানে ডেটা শুধুমাত্র প্রয়োজনের সময় লোড হয়।- JPQL এবং Named Queries ব্যবহার করে জটিল কুয়েরি লেখার মাধ্যমে আপনি ডেটাবেসের ডেটা কার্যকরভাবে রিট্রিভ করতে পারেন।
এগুলি আপনার JPA ডেভেলপমেন্টকে আরও শক্তিশালী এবং কার্যকরী করে তোলে।
Read more