了解Hibernate中的@BatchSize

时间:2014-08-08 19:30:07

标签: java hibernate

Hibernate documentation在@BatchSize中提供了一些信息:

  

@BatchSize指定"批量大小"用于获取此实例   按标识符分类。尚未加载的实例以批量大小加载   时间(默认为1)。

当我们需要使用它时,我不清楚这个注释的目的是什么。有些人可以帮我理解何时使用这个注释。

2 个答案:

答案 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条记录。从逻辑上讲,它会提高性能。