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