了解休眠中的@BatchSize
Hibernate 文档在 @BatchSize提供了一些信息,如下所示:
@BatchSize指定用于按标识符提取此类实例的“批大小”。尚未加载的实例一次加载批量大小(默认值 1)。
我不清楚这个注释的目的是什么,当我们需要使用它时。请有人帮助我了解何时使用此注释。
Hibernate 文档在 @BatchSize提供了一些信息,如下所示:
@BatchSize指定用于按标识符提取此类实例的“批大小”。尚未加载的实例一次加载批量大小(默认值 1)。
我不清楚这个注释的目的是什么,当我们需要使用它时。请有人帮助我了解何时使用此注释。
使用批处理提取,如果访问了一个代理,Hibernate 可以加载多个未初始化的代理。批量抓取是对惰性选择抓取策略的优化。有两种方法可以配置批处理提取:在类级别和集合级别。
类/实体的批处理提取更容易理解。请考虑以下示例:在运行时,您在一个会话中加载了 25 个 Cat 实例,每个 Cat 都有一个对其所有者 Person 的引用。Person 类使用代理进行映射,lazy=“true”。如果您现在遍历所有 cats 并调用 getOwner() 在每个 cats 上,则默认情况下,Hibernate 将执行 25 个 SELECT 语句来检索代理所有者。您可以通过在 Person 的映射中指定批大小来调整此行为:
<class name="Person" batch-size="10">...</class>
休眠现在将仅执行三个查询:模式为 10、10、5。
@BatchSize将根据您的大小从数据库获取记录。假设您的结果中有 100 条记录,如果您将批大小定义为 10,则它将为每个 db 调用获取 10 条记录。从逻辑上讲,它将提高性能。