Hibernate Native Entity Query

This section contains detail about Hibernate Native Entity Query with example code.

Hibernate Native Entity Query

Hibernate Native Entity Query

This section contains detail about Hibernate Native Entity Query with example code.

Using HQL or criteria query in Hibernate, you can execute nearly any type of SQL query. Even so some developer complaint about slowness of statement generated by Hibernate and they opt to generate their own SQL statement. These developer generated query is known as Hibernate Native SQL Query.

In Hibernate Native Entity Query, each row of ResultSet converts into a POJO object. Through addEntity( ) method selected data will map automatically to the passed class to the addEntity( ) method.

EXAMPLE

In the below example. we are fetching all the values from worker table using Hibernate native entity query.

The project hierarchy is given below :

The query for creating table worker is given below :

CREATE TABLE `worker` ( 
`worker_id` bigint(10) NOT NULL auto_increment, 
`firstname` varchar(50) default NULL, 
`lastname` varchar(50) default NULL, 
`birth_date` date NOT NULL, 
`cell_phone` varchar(15) NOT NULL, 
PRIMARY KEY (`worker_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CODE

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://192.168.10.13:3306/anky</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>

<property name="connection.pool_size">1</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="current_session_context_class">thread</property>
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">validate</property>

<mapping class="net.roseindia.Worker"/>

</session-factory>
</hibernate-configuration>

Worker.java

package net.roseindia;

import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "worker")
public class Worker {

@Id
@GeneratedValue
@Column(name = "worker_id")
private Long workerId;



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

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

@Column(name = "birth_date")
private Date birthDate;

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

public Worker() {

}

public Worker(String firstname, String lastname, Date birthdate,
String phone) {
this.firstname = firstname;
this.lastname = lastname;
this.birthDate = birthdate;
this.cellphone = phone;

}

public Long getWorkerId() {
return workerId;
}

public void setWorkerId(Long workerId) {
this.workerId = workerId;
}

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 Date getBirthDate() {
return birthDate;
}

public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}

public String getCellphone() {
return cellphone;
}

public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
}

HibernateNativeEntityQuery.java

package net.roseindia;

import java.util.Iterator;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateNativeEntityQuery {
private static SessionFactory sf;
private static ServiceRegistry serviceRegistry;

public static void main(String[] args) {
try {
Configuration configuration = new Configuration();
configuration.configure().setProperty("hibernate.show_sql", "false");
serviceRegistry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()).buildServiceRegistry();
sf = configuration.buildSessionFactory(serviceRegistry);
} catch (Throwable ex) {
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
System.out.println("***Hibernate Native Entity Query Example***");
System.out.println("-------------------------------------------");
Session session = sf.openSession();
try {
session.beginTransaction();
String sql = "SELECT * FROM worker";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(Worker.class);
List workers = query.list();

for (Iterator iterator = workers.iterator(); iterator.hasNext();) {
Worker worker = (Worker) iterator.next();
System.out.println("Worker Id:" + worker.getWorkerId());
System.out.println("Worker Name:" + worker.getFirstname());
System.out.println("Worker Birth Date:" + worker.getBirthDate());
System.out.println("Worker CellPhone No."+ worker.getCellphone());
System.out.println("-------------------------------------------");
}
session.getTransaction().commit();
} catch (HibernateException e) {
if (session.getTransaction() != null)
session.getTransaction().rollback();
e.printStackTrace();
} finally {
session.close();
}
}
}

OUTPUT

After execution, you will get the following result on console :

***Hibernate Native Entity Query Example***
-------------------------------------------
Worker Id:9
Worker Name:Sushmita
Worker Birth Date:1987-05-21 00:00:00.0
Worker CellPhone No.919595959595
-------------------------------------------
Worker Id:10
Worker Name:Nayana
Worker Birth Date:1987-06-30 00:00:00.0
Worker CellPhone No.919191919191
-------------------------------------------
Worker Id:11
Worker Name:Sameer
Worker Birth Date:1981-09-30 00:00:00.0
Worker CellPhone No.919191929292
-------------------------------------------

Download Source Code