hibernate中进行事务处理的时候,会将一个事务中的所有操作集中commit,假设一种情况,同时有数十万甚至数百万插入数据的sql一起执行,那么会出现这么一个情况,
就是在还没有等到commit的时候,内存就已经占满了,eclipse会报一个内存溢出的error,如果想要模拟这个异常,可以设置一个20万次的循环,当然如果电脑足够好的话,
还可以往上增加。。。
hibernate提供了解决这种麻烦的手段,那就是批处理。
首先,需要在hibernate的配置文件中加入这样一条设置,其中数值20是自定义的,也就是批处理的数量,当内存中有这么多次操作等待提交的时候,手动进行提交
<property name="hibernate.jdbc.batch_size" >20</property>
下面是测试:
package com.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.entity.User;
import com.util.HibernateUtil;
public class TestBatch {
public static void main(String[] args) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tr = session.beginTransaction(