正如hibernate documentation所说,在进行批量插入/更新时,当对象数量等于jdbc批量大小(hibernate.jdbc.batch_size
)时,应刷新并清除会话。我的问题是为什么这个数字应该等于hibernate.jdbc.batch_size
。有性能提示吗?
修改
举个例子,我认为我已经在hibernate.cfg文件中将hibernate.jdbc.batch_size
设置为30。然后正如文档所说,当对象计数等于30时,应该刷新会话。当对象计数为20或40时,为什么不应该刷新?
答案 0 :(得分:4)
JDBC批处理包括执行以下操作:
刷新会话包括告诉Hibernate:将保存在内存中的所有内容都插入到数据库中。
因此,如果您的批量大小设置为30,并且每次刷新5个实体,Hibernate将执行许多小批量的5个插入语句,而不是执行少于6个批次的30个语句。由于您已确定30是最佳批量大小,因此每5个实体刷新一次并不会使用此最佳大小。
相反,如果你冲洗每个35个实体,那么Hibernate将执行一批30个插入,然后是一批5个,然后是一批30个,然后是一批5个,等等。再一次,你和#39;不使用最佳批量大小。
如果刷新每30个实体,那么休眠只会执行最佳大小的批次,但如果实体总数不是30的倍数,则最后一个批次除外。