了解Hibernate中的@BatchSize

Cha*_*nya 7 java hibernate

Hibernate文档提供了在@BatchSize一些信息:

@BatchSize指定"批量大小",用于通过标识符获取此类的实例.尚未加载的实例一次加载批量大小(默认值为1).

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

Aun*_*Aun 12

使用批量提取,如果访问一个代理,Hibernate可以加载几个未初始化的代理.批量提取是延迟选择提取策略的优化.有两种方法可以配置批量提取:在类级别和集合级别.

批量获取类/实体更容易理解.请考虑以下示例:在运行时,您在会话中加载了25个Cat实例,并且每个Cat都有一个对其所有者的引用,即Person.Person类使用代理映射,lazy ="true".如果您现在遍历所有猫并在每个猫上调用getOwner(),默认情况下,Hibernate将执行25个SELECT语句来检索代理所有者.您可以通过在Person的映射中指定批量大小来调整此行为:

<class name="Person" batch-size="10">...</class>
Run Code Online (Sandbox Code Playgroud)

Hibernate现在只执行三个查询:模式为10,10,5.

  • @Ploni当您第一次使用惰性关系的getter时,hibernate会在会话中查找相同类型的其他对象。假设您输入的批量大小为“N”。然后,对于每个“N”父实体,使用“IN (:parentIds)”子句执行获取子实体的查询。如果您想使用此行为,您的查询必须在事务中执行。 (3认同)