Satellite Internet QuickBooks Advice international calling cards calling cards
JavaBeat Certifications Certifications Kits Articles Tips QNA Interview Questions SCJP 1.5 SCBCD 5.0 Java/J2EE Feeds
Feedback Request New Tips Print Email

Batch insert in Hibernate

Author : JavaBeat
Date : Sun Jul 13th, 2008
Topic : hibernate
Add to: Digg Add to: Del.icio.us Add to: Reddit Add to: StumbleUpon Add to: Slashdot Add to: Yahoo Add to: Google Add to: Blinklist Add to: Technorati Information

Batch insert in Hibernate

This example program shows how to insert multiple rows using the batch processing in hibernate. when there are thousand of rows to be persisted, everytime iterating and inserting will cause the memory problem. Hibernate stores all the persisted objects in the memory. To avoid this problem use batch processing in the hibernate.

To use the batch processing feature, first set hibernate.jdbc.batch_size as 50. This will tell the hibernate container that every 50 rows to be inserted as batch. Also there is a slight change in the code.


                for (int i =0;i<100;i++)
{
EmployeeInfo employeeInfo = new EmployeeInfo();
employeeInfo.setSno(1);;
employeeInfo.setName("Value : "+String.valueOf(i));
session.save(employeeInfo);
if (i%50 == 0)
{
session.flush();
session.clear();
}
}

the above code is used for inserting 50 rows. Do remember to call session.flush() every time. That will make the data to be persisted.

JavaBeatHibernateExample.java


package javabeat.net.hibernate;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

/**
* source : www.javabeat.net
*/
public class JavaBeatHibernateExample {
public static void main(String args[]){
Configuration configuration = new Configuration();
configuration.addClass(javabeat.net.hibernate.EmployeeInfo.class);
configuration.setProperty("hibernate.dialect",
"org.hibernate.dialect.DerbyDialect");
configuration.setProperty("hibernate.connection.url",
"jdbc:derby://localhost:1527/SampleDB");
configuration.setProperty("hibernate.connection.username", "root");
configuration.setProperty("hibernate.connection.driver_class",
"org.apache.derby.jdbc.ClientDriver");
configuration.setProperty("hibernate.connection.password", "root");
configuration.setProperty("hibernate.transaction.factory_class",
"org.hibernate.transaction.JDBCTransactionFactory");
configuration.setProperty("hibernate.current_session_context_class",
"thread");
configuration.setProperty("hibernate.show_sql", "true");
configuration.setProperty("hibernate.jdbc.batch_size", "50");
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
for (int i =0;i<100;i++)
{
EmployeeInfo employeeInfo = new EmployeeInfo();
employeeInfo.setSno(1);;
employeeInfo.setName("Value : "+String.valueOf(i));
session.save(employeeInfo);
if (i%50 == 0)
{
session.flush();
session.clear();
}
}
transaction.commit();
session.close();
}
}

EmployeeInfo.hbm.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="javabeat.net.hibernate.EmployeeInfo" table="Employee_Info">
<id name="sno" column="sno" type="java.lang.Integer">
<generator class="increment"/>
</id>
<property name="name" column="name" type="java.lang.String"/>
</class>
</hibernate-mapping>

Feedback Request New Tips Print Email

Favorites
C# problem error
Free Newsgroups
Latest QnA
SCJD Tips
When we start a thread by applying start() method on it ,how does it knows that to execute run()method?
About Wrapper class in Java
How to configure weblogic 7.0 in MyEclipse?
Static Block and Static Initializer in Java

JavaBeat Website (2004-2009), India
javabeat | about us | useful resources
Copyright (2004 - 2009), JavaBeat