都说hibernate批量添加要注意效率!要在hibernate.cfg.xml中设置
<property name="hibernate.jdbc.batch_size">20</property>
然后批量添加的时候做个判断,if(i%20==0)session就flush,clear.道理也很简单.处理20个就清理内存,减轻数据库压力.但是我理解的是如果设置了<property name="hibernate.jdbc.batch_size">20</property>我如果不写判断那么批量添加最多只能加20个,一次添加20以上就不对了啊应该.为啥还能加进去.还有个问题是我直接写if(i%20==0)session就flush,clear这个不行么?为什么一定还要设置<property name="hibernate.jdbc.batch_size">20</property>呢?

解决方案 »

  1.   

    hibernate.jdbc.fetch_size:指定JDBC抓取数量的大小 
    hibernate.jdbc.batch_size:设定一次最多可以提交多少sql语句的上限,提高sql语句的执行效率
    注意下区别。
      

  2.   

    上面的回复是没理解你的意思。这里的batch_size设置成20应该是指SQL调用的时候累计到20个SQL之后批量提交。 
    比如:同一个SessionFactory创建出来的一个session,执行40次SQL语句,对数据库进行2次操作
      

  3.   

    有些理解了!!<property name="hibernate.jdbc.batch_size">20</property>是为了commit
    而if(i%20)是为了清理缓存