Hibernate Batch Processing Insert Operation
We will use following files
Student.java
Student.hbm.xml
hibernate.cfg.xml
HibernateEngine.java
Student.java
public class Student {
private int rollNumber;
private String name;
private String address;
// set and get method
}
Student.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="javafiles.Student" table="STUDENTS_DATA">
<id name="rollNumber" column="ROLL_NUMBER" >
<generator class="assigned" />
</id>
<property name="name" column="NAME" length="20"/>
<property name="address" />
</class>
</hibernate-mapping>
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>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/mydb</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">false</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.jdbc.batch_size">20</property>
<mapping resource="Student.hbm.xml" />
</session-factory>
</hibernate-configuration>
HibernateEngin.java
import org.hibernate.*;
import org.hibernate.cfg.*;
public class HibernateEngine {
public static void main(String[] javaWorld)
{
System.out.println("******************* START ******************");
System.out.println("....Batch Processing Lesson....");
Configuration configurationObj = new Configuration();
configurationObj.configure("hibernate.cfg.xml");
SessionFactory sessionFactoryObj = configurationObj.buildSessionFactory();
Session sessionObj = sessionFactoryObj.openSession();
Transaction transactionObj = sessionObj.beginTransaction();
try{
for ( int y=1; y<=1000000; y++ ) {
Student studentObj=new Student();
studentObj.setRollNumber(y);
studentObj.setName("raj"+y);
studentObj.setAddress("Aand,A.V.Road,Pin-388001");
sessionObj.save(studentObj);
/*
if ( y % 20 == 0 ) {
sessionObj.flush();
sessionObj.clear();
}
*/
}
System.out.println("1000000 Students Data saved successfully. :-) ");
transactionObj.commit();
sessionObj.close();
sessionFactoryObj.close();
}catch(Exception ex){
System.out.println(" Error :-( "+ex.getMessage());
}
System.out.println("******************* END ******************");
}
}
Read me : Run above code two times
i) Without flush and clear method condition
ii) With flush and clear method condition