指定hibernate.jdbc.batch_size有什么意义?

时间:2012-01-20 01:18:30

标签: hibernate first-level-cache updatebatchsize

这个Hibernate配置表面上应该控制在第一级缓存中缓存多少个对象。原因很容易理解,我们不想耗尽内存。

但有些事让我感到困惑。我见过的每个实现包括this website 有明确的同花顺和明确。没问题,但那么配置属性有什么意义呢?

注意:我假设Hibernate以某种方式监视缓存的大小,如果某种类型的对象数量增长到大于缓存大小,则将缓存与db同步。不知道这个假设是不是错了???

1 个答案:

答案 0 :(得分:22)

此配置选项与第一级缓存的大小无关。并且刷新会话并不会从缓存中删除任何内容。它将挂起的更改(插入,删除,更新)写入数据库。仅当明确调用clear()或会话关闭时,才会清除缓存。如果您不清除或声明会话(或拒绝特定实体),缓存将继续增长和增长。这不是问题,因为它通常非常短暂(交易的持续时间)。

JDBC批处理更新允许在一个批处理中向数据库发送多个更新查询。它减少了网络呼叫的数量。您可以将其视为上传包含20个文件的未压缩zip,而不是单独发送20个文件。

混淆来自于您的问题中链接的页面中提到的批处理更新与JDBC批处理更新无关。 Hibernate对批量更新的意义是批处理作业完成的更新"。批处理作业通常具有比典型业务用例更长的事务,并且在单个事务中更新数百,数千甚至更多实体。这就是为什么Hibernate建议在这种情况下定期刷新和清除会话,以避免内存不足。