正如hibernate文档所述,在进行批处理插入/更新时,当对象数量等于jdbc批处理大小(hibernate.jdbc.batch_size)时,应刷新并清除会话。我的问题是,为什么该数字应等于hibernate.jdbc.batch_size。有表演技巧吗? 编辑: 例如,我hibernate.jdbc.batch_size在hibernate.cfg文件中将其设置为30。然后,正如文档所说,当对象计数等于30时,应刷新会话。为什么当对象计数为20或40时不刷新?
hibernate.jdbc.batch_size
JDBC批处理包括以下步骤:
刷新会话包括告诉Hibernate:将内存中保留的所有内容都插入数据库。
因此,如果您的批处理大小设置为30,并且每5个实体刷新一次,则Hibernate将执行很多小批处理,每个批处理包含5条插入语句,而不是少执行6批30条语句。由于您确定30为最佳批处理大小,因此每5个实体进行刷新不会使用此最佳大小。
相反,如果刷新每个35个实体,则Hibernate将执行一批30次插入,然后一批5次,然后一批30次,然后批5次,依此类推。再次,您不是使用最佳批次大小。
如果您每30个实体刷新一次,则hibernate状态将仅执行最佳大小的批处理,如果最后一个实体的总数不是30的倍数,则hibernate模式除外。