休眠是否会进行预测性缓存?

Tho*_*hom 5 java hibernate sql-server-2008-r2

我们的DBA刚回来时对SQL服务器数据库进行了长时间的查询.他认为我们应该检查该查询,看看我们是否可以进行优化.

问题是查询不是来自我们的应用程序代码.它通过主键从单个表中加载多个记录,准确地说是九个,并且我们从来没有通过我们的应用程序中的主键对该表进行任何查询.它绝对是hibernate所做的hibernate查询,hibernate所做的以及所有属性的加载.

所以我想知道hibernate是否会做一些预测性缓存,就像拉出它认为我以后想要的记录一样.有什么输入吗?

谢谢.

JB *_*zet 3

这可能是由于批量获取而执行的查询:

使用批量获取,如果访问一个代理,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。