当前位置: 首页 > 面试题库 >

为什么要刷新的对象数应等于hibernate.jdbc.batch_size?

陶寒
2023-03-14
问题内容

正如hibernate文档所述,在进行批处理插入/更新时,当对象数量等于jdbc批处理大小(hibernate.jdbc.batch_size)时,应刷新并清除会话。我的问题是,为什么该数字应等于hibernate.jdbc.batch_size。有表演技巧吗?
编辑:
例如,我hibernate.jdbc.batch_size在hibernate.cfg文件中将其设置为30。然后,正如文档所说,当对象计数等于30时,应刷新会话。为什么当对象计数为20或40时不刷新?


问题答案:

JDBC批处理包括以下步骤:

  • 将插入语句添加到批处理中,保存在内存中
  • 当您达到了批处理中记录的给定数量的插入语句时(或不再有要执行的插入语句时),请在一次网络往返中将此批处理命令发送到数据库,以便数据库实际执行这些操作插入语句。

刷新会话包括告诉Hibernate:将内存中保留的所有内容都插入数据库

因此,如果您的批处理大小设置为30,并且每5个实体刷新一次,则Hibernate将执行很多小批处理,每个批处理包含5条插入语句,而不是少执行6批30条语句。由于您确定30为最佳批处理大小,因此每5个实体进行刷新不会使用此最佳大小。

相反,如果刷新每个35个实体,则Hibernate将执行一批30次插入,然后一批5次,然后一批30次,然后批5次,依此类推。再次,您不是使用最佳批次大小。

如果您每30个实体刷新一次,则hibernate状态将仅执行最佳大小的批处理,如果最后一个实体的总数不是30的倍数,则hibernate模式除外。



 类似资料:
  • 问题内容: 在Java中,当我说。我得到与答案相同的值,即包含。我已经在C ++中验证了同样的内容。 为什么会这样呢? 问题答案: 阅读Joshua Bloch撰写的Effective Java中的内容。 我找到了这个问题的答案,这里是解释:计算机使用二进制算术工作,java或任何语言的函数的逻辑如下: 注意:如何找到2的补码 对于给定的数字,我们首先找到它的补数,然后再加1。例如,假设我们的数字

  • 问题内容: 我已经从Khalid Mughal SCJP复制了以下程序片段,但是我无法 理解输出。 上面的程序为第一个print语句提供了输出true,但是应该给出false,因为它是==关系运算符的引用比较。但是第三张印刷品是假的,我不理解这种不一致。 解释非常感谢! 问题答案: 在第一种情况下,两个和都指向相同的缓存对象。默认情况下,-128和127之间的范围作为对象缓存。我们可以使用

  • 这是我在班级游戏板。在这节课中,我尝试制作一个GameTree来返回这个棋盘上所有可能的下一步动作的列表。当这部分代码运行时,它会影响游戏板,因为它包含了这段代码,导致所有的移动实际上都是在游戏板上进行的,在游戏板上,我只是尝试用一个移动来返回板。下面是Gameboard中的代码: 我不明白为什么这不是简单地创建一个新的游戏板对象,播放有效的移动,并将其添加到列表。相反,在这个for循环结束时,游

  • 我正在阅读 Auth0 站点上有关刷新令牌和 SPA 的文档,他们指出 SPA 不应使用刷新令牌,因为它们无法安全地存储在浏览器中,而是使用静默身份验证来检索新的访问令牌。 单页应用程序(通常实施 我很困惑。据我了解,检索新访问令牌的唯一方法是向身份验证服务器提交新请求,以及某种形式的 Auth0 会话 cookie,以对登录的用户进行身份验证。收到会话 cookie 后,Auth0 服务器将能够

  • 我创建了的两个实例,如下所示。一个是从创建的,另一个是相同的,但在开头加上了一些附加的数字。使用方法比较它们时,它返回: 我认为添加的数字被丢弃了,并且两者给出了相同的UUID字符串值。为什么会这样?