hibernate 批量插入性能优化

在使用hibernate进行批量数据插入的时候,性能往往是一个比较大的问题。性能优化主要就是减少与数据库交互的次数。 首先要设置hibernate.jdbc.batch_size:

<prop key="hibernate.jdbc.batch_size">50</prop>

 

但是hibernate是对相同的prepared statement才会batch,当插入级联的表的时候,生成的sql一般会是insert into parent_table; insert into child_table交错,这样batch就不能起到很好的效果。这里需要设置hibernate.order_inserts让hibernate自动将所有产生的sql排序,以得到batch更好的优化效果

<prop key="hibernate.order_inserts">true</prop>

<prop key="hibernate.order_updates">true</prop>

 

另外对于插入时的主键设置,如果要用到数据库本身的sequence的话,避免每得到一个sequence值都访问数据库,应当采用hilo的主键生成机制,让数据库的sequence维护主键的高位,hibernate去维护低位。贴个例子

 

@Id

      @GeneratedValue (strategy=GenerationType. SEQUENCE , generator= "hibseq" )

      @GenericGenerator (name = "hibseq" , strategy = "seqhilo" , parameters = { @Parameter (name = "max_lo" , value = "9999" ),

                  @Parameter (name = "sequence" , value = "VAL_TYPE_SEQ" ) })

      private Integer val_type_id ;

完成以上几点配置,hibernate的批量插入性能能有很大提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值