这个 Hibernate 配置表面上应该控制有多少对象被缓存在一级缓存中。原因很容易理解,我们不想耗尽内存。
但有些事情让我很困惑。我见过的每个实现,包括这个网站 都有一个明确的刷新和清除。没问题,但是配置属性有什么意义呢?
注意:我在这里假设 Hibernate 以某种方式监视缓存的大小,并且如果某种类型的对象的数量增长到大于缓存大小,则将缓存与 db 同步。不知道这个假设是不是错???
这个 Hibernate 配置表面上应该控制有多少对象被缓存在一级缓存中。原因很容易理解,我们不想耗尽内存。
但有些事情让我很困惑。我见过的每个实现,包括这个网站 都有一个明确的刷新和清除。没问题,但是配置属性有什么意义呢?
注意:我在这里假设 Hibernate 以某种方式监视缓存的大小,并且如果某种类型的对象的数量增长到大于缓存大小,则将缓存与 db 同步。不知道这个假设是不是错???
该配置选项与一级缓存的大小无关。并且刷新会话不会从缓存中删除任何内容。它将挂起的更改(插入、删除、更新)写入数据库。仅当显式调用 clear() 或会话关闭时才会清除缓存。如果您不清除或子句会话(或检查特定实体),缓存将不断增长。这不是问题,因为它通常非常短暂(交易的持续时间)。
JDBC 批量更新允许在一个批次中向数据库发送多个更新查询。它减少了网络调用的数量。您可以将其视为上传包含 20 个文件的未压缩 zip,而不是单独发送 20 个文件。
混淆来自于您问题中链接的页面中提到的批量更新与 JDBC 批量更新无关。Hibernate 对批处理更新的含义是“由批处理作业完成的更新”。批处理作业通常具有比典型业务用例更长的事务,并在单个事务中更新数百、数千甚至更多实体。这就是为什么 Hibernate 建议在这种情况下定期刷新和清除会话,以避免内存不足。