Hibernate : SessionFactory

In this section we will discuss concept of SessionFactory.

Hibernate : SessionFactory

Hibernate : SessionFactory

In this section we will discuss concept of SessionFactory.

Hibernate SessionFactory :

For SessionFactory import org.hibernate.SessionFactory API.

SessionFactory is one of Hibernate concept. It creates session instances. In general an application has a single SessionFactory.
It is immutable and when it is created its internal state is set. This internal state contains metadata about O/R mapping.
The behavior of a sessionFactory is controlled by properties supplied at configuration time.

SessionFactory is thread safe so that many threads can access SessionFactory and request for sessions.

Example : Here we are going to give you example and describing how sessionFactory plays its role and how session is created.

Take a view on Hibernate.cfg.xml - Here we are configuring sessionFactory.

<?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://localhost:3306/hibernate_examples</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">none</property>
<mapping class="net.roseindia.table.Employee" />
</session-factory>

</hibernate-configuration>

Main Class HibernateSessionFactory.java -Here we show how sessionFactory creates Session.

package net.roseindia.main;

import java.util.*;
import net.roseindia.util.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

public class HibernateSessionFactory {
public static void main(String[] args) {
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); //Creating instance of SessionFactory
Session session = sessionFactory.openSession(); // session is opened

String hql = "SELECT emp.name, emp.salary, emp.dateOfJoin from Employee emp";
Query query = session.createQuery(hql);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);

List objectList = query.list();
Iterator iterator = objectList.iterator();
System.out.println("Employee Name \t Salary \t Date of Join");
while (iterator.hasNext()) {
Map map = (Map) iterator.next();
System.out.print(map.get("0"));
System.out.print("\t\t" + map.get("1"));
System.out.print("\t\t" + map.get("2"));
System.out.println();
}

session.close(); // session is closed
}
}

Output :

Hibernate: select employee0_.name as col_0_0_, employee0_.salary as col_1_0_, employee0_.date_of_join as col_2_0_ from employee employee0_
Employee Name     Salary       Date of Join
Mandy             20000        2010-03-12 00:00:00.0
Som               20000        1999-06-22 00:00:00.0
Mac               15000        2003-12-23 00:00:00.0
Roxi              22000        2001-02-03 00:00:00.0
Rowdy             20000        2012-06-27 00:00:00.0
Linda             20000        2010-06-12 00:00:00.0
Lizza             25000        2010-06-12 00:00:00.0

Click here to download complete source code