Hibernate Query Language (HQL) হল Hibernate-এর নিজস্ব অনুসন্ধান ভাষা, যা SQL (Structured Query Language) এর মতো কাজ করে তবে এটি object-oriented। HQL আপনাকে ডেটাবেস টেবিলের উপর কাজ করার জন্য SQL কোড লেখার পরিবর্তে Java Objects এবং তাদের properties ব্যবহার করতে সক্ষম করে।
HQL-এর মাধ্যমে আপনি Java objects এর উপর অনুসন্ধান চালাতে পারেন, যেমন SELECT
, UPDATE
, DELETE
, এবং INSERT
স্টেটমেন্টগুলি। HQL SQL এর মতোই ব্যবহার করা যায়, তবে এটি SQL এর পরিবর্তে Hibernate-এর অবজেক্ট মডেল (Java classes) ব্যবহার করে।
select
, update
, delete
ইত্যাদি কুয়েরি চালানো যায়, যেমন SQL-এ করা হয়, তবে এটি Java objects ব্যবহার করে।SELECT
QueryHQL-এ SELECT
কুয়েরি সাধারণত Java Objects বা properties এর উপর কাজ করে।
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Main {
public static void main(String[] args) {
// Hibernate configuration setup
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(User.class).buildSessionFactory();
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
// HQL query
String hql = "FROM User WHERE email = 'john.doe@example.com'"; // SELECT query using HQL
Query query = session.createQuery(hql);
User user = (User) query.uniqueResult(); // Fetching one result
// Display the result
System.out.println("User Details: " + user);
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে, FROM User
ক্লাসের সমস্ত User
অবজেক্টগুলি ফেরত দেয়, যেখানে email
ফিল্ডের মান "john.doe@example.com"
।
SELECT
Query with Fieldsআপনি শুধুমাত্র কিছু নির্দিষ্ট ফিল্ডের জন্য SELECT
কুয়েরি চালাতে পারেন।
String hql = "SELECT name, email FROM User WHERE id = 1";
Query query = session.createQuery(hql);
Object[] result = (Object[]) query.uniqueResult();
System.out.println("User Name: " + result[0] + ", Email: " + result[1]);
এখানে, শুধুমাত্র name
এবং email
ফিল্ডকে নির্বাচন করা হয়েছে।
UPDATE
QueryHQL তে UPDATE
কুয়েরি ব্যবহার করে কোনো অবজেক্টের ফিল্ড আপডেট করা যায়।
String hql = "UPDATE User SET name = :userName WHERE id = :userId";
Query query = session.createQuery(hql);
query.setParameter("userName", "New Name");
query.setParameter("userId", 1);
int result = query.executeUpdate(); // Executes the update query
System.out.println("Rows affected: " + result);
এখানে, User
অবজেক্টের name
ফিল্ডটি আপডেট করা হচ্ছে id = 1
অবজেক্টের জন্য।
DELETE
QueryHQL তে DELETE
কুয়েরি ব্যবহার করে অবজেক্ট মুছে ফেলা যায়।
String hql = "DELETE FROM User WHERE id = :userId";
Query query = session.createQuery(hql);
query.setParameter("userId", 1);
int result = query.executeUpdate(); // Executes the delete query
System.out.println("Rows affected: " + result);
এখানে, User
টেবিল থেকে id = 1
এর জন্য রেকর্ড মুছে ফেলা হচ্ছে।
COUNT
QueryHQL তে COUNT
ফাংশন ব্যবহার করে ডেটার সংখ্যা বের করা যায়।
String hql = "SELECT COUNT(*) FROM User";
Query query = session.createQuery(hql);
long count = (long) query.uniqueResult();
System.out.println("Total Users: " + count);
এখানে, User
টেবিলের মোট রেকর্ডের সংখ্যা বের করা হচ্ছে।
Parameterized Queries:
setParameter
পদ্ধতি ব্যবহার করে কুয়েরিতে ডায়নামিক ভ্যালু পাস করা যায়।String hql = "FROM User WHERE email = :userEmail";
Query query = session.createQuery(hql);
query.setParameter("userEmail", "john.doe@example.com");
JOIN Operations:
String hql = "FROM User u JOIN u.orders o WHERE o.status = :orderStatus";
Query query = session.createQuery(hql);
query.setParameter("orderStatus", "shipped");
List<User> users = query.list();
এখানে, User
এবং Orders
টেবিলের মধ্যে যোগসূত্র তৈরি করা হয়েছে।
Pagination:
String hql = "FROM User";
Query query = session.createQuery(hql);
query.setFirstResult(0); // Starting index
query.setMaxResults(10); // Number of records to fetch
List<User> users = query.list();
Hibernate Query Language (HQL) হল Hibernate ORM ফ্রেমওয়ার্কের একটি শক্তিশালী বৈশিষ্ট্য, যা আপনাকে ডেটাবেস টেবিলের সাথে কাজ করার জন্য object-oriented কুয়েরি প্রদান করে। HQL SQL এর মতো হলেও এটি Java objects এবং তাদের properties ব্যবহার করে। এর মাধ্যমে SELECT
, INSERT
, UPDATE
, DELETE
এবং অন্যান্য কুয়েরি অপারেশন সহজভাবে করা সম্ভব হয়। HQL ব্যবহার করে আপনি ডেটাবেস ম্যানিপুলেশনকে আরও বেশি জাভা-ফ্রেন্ডলি এবং কার্যকরী করতে পারেন।
Hibernate Query Language (HQL) হল Hibernate ফ্রেমওয়ার্কের নিজস্ব একটি কুয়েরি ভাষা যা SQL এর মতো হলেও এটি object-oriented। এটি SQL-এর চেয়ে ভিন্ন কারণ এটি Java objects এবং entity classes এর মাধ্যমে কুয়েরি চালায়, আর relational database tables সরাসরি কুয়েরি করার পরিবর্তে Java objects এর উপর কাজ করে। HQL হল Hibernate ORM (Object-Relational Mapping) এর মাধ্যমে রিলেশনাল ডেটাবেসের সাথে যোগাযোগের জন্য ব্যবহৃত কুয়েরি ভাষা।
Employee
নামক একটি entity ক্লাস ব্যবহার করতে পারেন, যা টেবিলের employee
এর সঙ্গে ম্যাপিং হয়।SELECT
, FROM
, WHERE
ইত্যাদি ব্যবহৃত হলেও, এটি Java objects বা class-based কুয়েরি করে। HQL-এ table এবং column এর পরিবর্তে entity এবং property ব্যবহার করা হয়।HQL কুয়েরির একটি সাধারণ গঠন হল:
SELECT <property> FROM <EntityClass> WHERE <condition>
SELECT Query:
SELECT e.name FROM Employee e WHERE e.salary > 50000
এখানে, Employee
ক্লাসের name
প্রপার্টি এবং salary
প্রপার্টি ব্যবহার করা হয়েছে। HQL-এ আমরা ক্লাসের নাম এবং ফিল্ড (প্রপার্টি) ব্যবহার করি।
UPDATE Query:
UPDATE Employee e SET e.salary = :newSalary WHERE e.id = :empId
এখানে, :newSalary
এবং :empId
হল প্যারামিটার যা রানটাইমে সরবরাহ করা হবে।
DELETE Query:
DELETE FROM Employee e WHERE e.salary < 20000
<!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>
import javax.persistence.*;
@Entity
@Table(name="employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@Column(name="salary")
private double salary;
// Constructors, getters, and setters
public Employee() {}
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
// Getters and Setters
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 double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import java.util.List;
public class HQLExample {
public static void main(String[] args) {
// SessionFactory তৈরি করা
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// সেশন তৈরি করা
Session session = factory.getCurrentSession();
try {
// HQL কুয়েরি চালানো (সব Employees এর নাম সংগ্রহ করা যাদের salary 50000 এর বেশি)
session.beginTransaction();
List<String> employeeNames = session.createQuery("SELECT e.name FROM Employee e WHERE e.salary > 50000")
.getResultList();
for (String name : employeeNames) {
System.out.println("Employee Name: " + name);
}
// HQL UPDATE কুয়েরি
session.createQuery("UPDATE Employee e SET e.salary = 60000 WHERE e.salary < 50000")
.executeUpdate();
// HQL DELETE কুয়েরি
session.createQuery("DELETE FROM Employee e WHERE e.salary < 20000")
.executeUpdate();
// ট্রানজেকশন কমিট করা
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে:
session.createQuery("SELECT e.name FROM Employee e WHERE e.salary > 50000")
HQL কুয়েরি তৈরি করে, যেখানে e.name
হল Employee entity এর name
প্রপার্টি এবং e.salary
হল salary
প্রপার্টি।session.createQuery("UPDATE Employee e SET e.salary = 60000 WHERE e.salary < 50000")
HQL দিয়ে salary কম থাকার Employee গুলোর salary আপডেট করা হয়।session.createQuery("DELETE FROM Employee e WHERE e.salary < 20000")
HQL দিয়ে salary কম থাকা Employee গুলি ডিলিট করা হয়।Hibernate Query Language (HQL) একটি শক্তিশালী এবং object-oriented কুয়েরি ভাষা যা Hibernate ফ্রেমওয়ার্কের সাথে ডেটাবেসে ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়। এটি SQL এর মতো দেখতে হলেও, HQL Java objects-এর উপর কুয়েরি চালায় এবং database independence, simplified querying এবং parameter binding প্রদান করে। HQL Hibernate অ্যাপ্লিকেশনের জন্য একটি গুরুত্বপূর্ণ অংশ, কারণ এটি ডেটাবেস অপারেশনগুলো অবজেক্ট-ওরিয়েন্টেডভাবে পরিচালনা করতে সাহায্য করে।
HQL (Hibernate Query Language) এবং SQL (Structured Query Language) দুটি ডেটাবেস কুয়েরি ভাষা হলেও, তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। Hibernate Query Language (HQL) হল Hibernate ফ্রেমওয়ার্কের জন্য একটি কাস্টম কুয়েরি ভাষা যা Java objects এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক তৈরি করে, যেখানে SQL হল ডেটাবেসের সঙ্গে সরাসরি যোগাযোগ করার জন্য ব্যবহৃত একটি স্ট্যান্ডার্ড কুয়েরি ভাষা।
এখানে HQL এবং SQL এর মধ্যে প্রধান পার্থক্যগুলো আলোচনা করা হয়েছে।
উদাহরণ:
FROM User u WHERE u.name = 'John'
এখানে User
হল একটি Java class (entity), এবং u.name
হল সেই class এর একটি property।
উদাহরণ:
SELECT * FROM users WHERE name = 'John';
এখানে users
হল একটি টেবিল এবং name
একটি কলাম।
তুলনা:
তুলনা:
তুলনা:
তুলনা:
JOIN
বা INNER JOIN
ব্যবহার করতে হয়।তুলনা:
JOIN
clause.তুলনা:
উদাহরণ:
FROM User u WHERE u.name = 'John'
উদাহরণ:
SELECT * FROM users WHERE name = 'John';
তুলনা:
FROM User u WHERE u.name = 'John'
(Java objects, properties).SELECT * FROM users WHERE name = 'John'
(Database tables, columns).Feature | HQL (Hibernate Query Language) | SQL (Structured Query Language) |
---|---|---|
Query Type | Object-oriented (Java objects) | Relational-oriented (Tables and columns) |
Database Independence | Yes, Hibernate handles database-specific SQL | No, database-specific SQL syntax required |
Supports Object Relationships | Yes (e.g., one-to-many, many-to-one) | No (only through JOIN operations) |
Polymorphic Queries | Yes (supports inheritance) | No (cannot handle object inheritance) |
Joins | Automatic joins based on object relations | Explicit joins using JOIN keyword |
Syntax | Java objects and properties | Database tables and columns |
HQL হল Hibernate এর নিজস্ব কুয়েরি ভাষা যা Java objects এবং তাদের সম্পর্কের উপর কাজ করে, যা ORM ভিত্তিক অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত উপযোগী। অন্যদিকে, SQL একটি ডেটাবেস ভিত্তিক ভাষা যা ডেটাবেসের টেবিল এবং কলামগুলির উপর কাজ করে। HQL আপনাকে ডেটাবেসের সাথে কাজ করার সময় object-oriented ফিচারগুলি প্রদান করে, যেখানে SQL সরাসরি ডেটাবেস টেবিলের সাথে কাজ করে।
HQL (Hibernate Query Language) হল Hibernate এর জন্য তৈরি করা একটি Object-Oriented Query Language যা SQL এর মতো দেখতে হলেও SQL নয়। এটি Hibernate Entity Objects এবং তাদের প্রোপার্টিগুলির উপর ভিত্তি করে কাজ করে। HQL দিয়ে আপনি Java objects এবং database tables এর মধ্যে সম্পর্ক স্থাপন করতে পারেন এবং ডেটাবেস থেকে ডেটা পুনরুদ্ধার বা আপডেট করতে পারেন।
HQL এর মাধ্যমে SQL কোড লেখার প্রয়োজনীয়তা কমে যায় এবং ডেটাবেসের সাথে সম্পর্কিত Java classes এর মধ্যে ম্যাপিং সরাসরি ব্যবহার করা সম্ভব হয়।
ধরা যাক, আমাদের Employee
Entity Class আছে এবং আমরা এই ক্লাসের মাধ্যমে ডেটাবেসে কোয়েরি চালাতে চাই। নিচে HQL এর মাধ্যমে কিছু সাধারণ query example দেওয়া হলো:
import javax.persistence.*;
import java.util.List;
@Entity
@Table(name="employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String department;
private double salary;
// Getters and Setters
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 String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import java.util.List;
public class HibernateApp {
public static void main(String[] args) {
// Create session factory
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Employee.class).buildSessionFactory();
// Create session
Session session = factory.getCurrentSession();
try {
// Start a transaction
session.beginTransaction();
// Create HQL query to get all employees
Query<Employee> query = session.createQuery("from Employee", Employee.class);
// Execute query and get result list
List<Employee> employees = query.getResultList();
// Display the results
for (Employee emp : employees) {
System.out.println(emp.getName());
}
// Commit transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
Explanation:
from Employee
: এটি HQL এর মাধ্যমে Employee Entity ক্লাসের সমস্ত রেকর্ডগুলি অনুরোধ করে।getResultList()
: এই মেথডটি Employee তালিকাতে সমস্ত রেকর্ড ফেরত দেয়।public class HibernateApp {
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Employee.class).buildSessionFactory();
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
// HQL query with WHERE condition
Query<Employee> query = session.createQuery("from Employee where department='IT'");
List<Employee> employees = query.getResultList();
for (Employee emp : employees) {
System.out.println(emp.getName());
}
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
Explanation:
where department='IT'
: এটি সেই সমস্ত Employee রেকর্ড ফেরত দেবে যেখানে department এর মান 'IT'
।public class HibernateApp {
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Employee.class).buildSessionFactory();
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
// HQL query using LIKE for pattern matching
Query<Employee> query = session.createQuery("from Employee where name like 'J%'");
List<Employee> employees = query.getResultList();
for (Employee emp : employees) {
System.out.println(emp.getName());
}
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
Explanation:
like 'J%'
: এটি সমস্ত Employee রেকর্ডগুলি ফেরত দেবে যার name 'J' দিয়ে শুরু হয়।public class HibernateApp {
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Employee.class).buildSessionFactory();
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
// HQL query to get employees sorted by name
Query<Employee> query = session.createQuery("from Employee order by name");
List<Employee> employees = query.getResultList();
for (Employee emp : employees) {
System.out.println(emp.getName());
}
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
Explanation:
order by name
: এটি সমস্ত Employee রেকর্ডগুলো name এর আঙ্গিক অনুযায়ী সজ্জিত করবে।public class HibernateApp {
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Employee.class).buildSessionFactory();
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
// HQL query to update salary of employees
Query query = session.createQuery("update Employee set salary=5000 where department='IT'");
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
Explanation:
update Employee set salary=5000 where department='IT'
: এটি সকল IT বিভাগের কর্মীদের salary ৫০০০ করে আপডেট করবে।public class HibernateApp {
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Employee.class).buildSessionFactory();
Session session = factory.getCurrentSession();
try {
session.beginTransaction();
// HQL query to delete an employee
Query query = session.createQuery("delete from Employee where id=1");
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
Explanation:
delete from Employee where id=1
: এটি id=1
এর Employee রেকর্ডটি ডিলিট করবে।HQL Query Syntax সহজে ব্যবহারযোগ্য এবং Hibernate-এর শক্তিশালী ORM সক্ষমতা ব্যবহার করে object-relational mapping সহজ করে তোলে।
Hibernate (হাইবারনেট) একটি ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা Java অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। Hibernate আপনাকে Named Query এবং Native SQL Query এর মাধ্যমে ডেটাবেস থেকে ডেটা আহরণের জন্য কুয়েরি চালানোর সুবিধা প্রদান করে।
নিচে Named Query এবং Native SQL Query সম্পর্কিত বিস্তারিত আলোচনা করা হয়েছে।
Named Query Hibernate-এর একটি শক্তিশালী বৈশিষ্ট্য, যা আপনাকে পূর্ব-সংজ্ঞায়িত (predefined) SQL বা HQL (Hibernate Query Language) কুয়েরি সংরক্ষণ করতে সহায়তা করে। এর মাধ্যমে আপনি কুয়েরি রিচুয়াল এবং ফিচারের জন্য কোড পুনঃব্যবহারযোগ্যতা এবং কনভেনিয়েন্স অর্জন করতে পারেন। Named Query সাধারণত হাইবারনেট @NamedQuery
অ্যানোটেশন বা XML কনফিগারেশনের মাধ্যমে তৈরি করা হয়।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
@Entity
@NamedQuery(name = "User.findByName", query = "FROM User u WHERE u.name = :name")
public class User {
@Id
private int id;
private String name;
private String email;
// Getters and Setters
}
এখানে, @NamedQuery
ব্যবহার করা হয়েছে যা User ক্লাসের মধ্যে findByName
নামে একটি named query তৈরি করে। এই কুয়েরি User টেবিল থেকে সেই ইউজারের ডেটা বের করবে যাদের নাম :name
প্যারামিটার সমান।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateNamedQueryExample {
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(User.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
// Start a transaction
session.beginTransaction();
// Execute Named Query
String name = "John Doe";
User user = (User) session.createNamedQuery("User.findByName")
.setParameter("name", name)
.uniqueResult();
// Display the result
System.out.println("User found: " + user);
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে, createNamedQuery()
পদ্ধতি ব্যবহার করে Named Query চালানো হয়েছে এবং প্যারামিটার হিসেবে ইউজারের নাম পাঠানো হয়েছে।
Hibernate-এ Native SQL Query ব্যবহার করলে আপনি সরাসরি ডেটাবেসে নির্দিষ্ট SQL কুয়েরি চালাতে পারেন। এই কুয়েরি ডেটাবেস নির্দিষ্ট (Database-specific) হতে পারে, এবং Hibernate এর HQL থেকে ভিন্ন, এটি ডেটাবেসের actual SQL সিন্দৃশ (syntax) অনুসরণ করে। Hibernate আপনাকে Native SQL কুয়েরি চালানোর জন্য createSQLQuery()
পদ্ধতি সরবরাহ করে।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateNativeQueryExample {
public static void main(String[] args) {
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(User.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
// Start a transaction
session.beginTransaction();
// Execute Native SQL Query
String sql = "SELECT * FROM users WHERE name = :name";
User user = (User) session.createSQLQuery(sql)
.addEntity(User.class)
.setParameter("name", "John Doe")
.uniqueResult();
// Display the result
System.out.println("User found: " + user);
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে, createSQLQuery()
পদ্ধতি ব্যবহার করে একটি Native SQL Query চালানো হয়েছে, যা ডেটাবেসের users টেবিল থেকে ইউজারের তথ্য নিয়ে আসে।
Criteria | Named Query | Native SQL Query |
---|---|---|
Language | HQL (Hibernate Query Language) | Actual SQL (Database-specific SQL syntax) |
Abstraction Level | High abstraction (works with Java objects) | Low abstraction (works with raw SQL and database tables) |
Database Independence | Database-independent (works across different DBs) | Database-specific (depends on the DB's SQL syntax) |
Complexity | Simpler for basic queries | Suitable for complex or database-specific queries |
Performance | May be less optimized in certain cases | Optimized for specific database features |
Use Case | Suitable for object-based queries | Suitable for database-specific queries (complex joins, functions) |
Hibernate-এ Named Query এবং Native SQL Query দুটোই গুরুত্বপূর্ণ এবং কার্যকরী কুয়েরি প্রক্রিয়া, তবে তাদের ব্যবহার পরিস্থিতির ওপর নির্ভর করে। Named Query সাধারণত ব্যবহৃত হয় যখন আপনি ডেটাবেসের অযথা নির্দিষ্ট SQL সিনট্যাক্স থেকে অবাধ থাকতে চান, এবং Native SQL তখন ব্যবহার করা হয় যখন আপনার ডেটাবেসের নির্দিষ্ট ক্ষমতাগুলি যেমন complex joins, stored procedures ইত্যাদি ব্যবহার করতে হয়।
Read more