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 -------------------------------------------