Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate做预测缓存吗?_Java_Hibernate_Sql Server 2008 R2 - Fatal编程技术网

Java hibernate做预测缓存吗?

Java hibernate做预测缓存吗?,java,hibernate,sql-server-2008-r2,Java,Hibernate,Sql Server 2008 R2,我们的DBA刚刚带着一个针对SQL server数据库的长时间运行的查询回来。他认为我们应该回顾一下这个问题,看看是否可以优化 问题是查询不是来自我们的应用程序代码。它是通过主键从一个表中加载多个记录,确切地说是九个,并且我们的应用程序从未通过主键对该表进行任何查询。它也确实是一个hibernate查询,它的名称是hibernate所做的破坏和所有属性的加载 所以我想知道hibernate是否做了一些预测性的缓存,比如提取它认为我以后可能需要的记录。有什么意见吗 谢谢。这可能是由于以下原因执行的

我们的DBA刚刚带着一个针对SQL server数据库的长时间运行的查询回来。他认为我们应该回顾一下这个问题,看看是否可以优化

问题是查询不是来自我们的应用程序代码。它是通过主键从一个表中加载多个记录,确切地说是九个,并且我们的应用程序从未通过主键对该表进行任何查询。它也确实是一个hibernate查询,它的名称是hibernate所做的破坏和所有属性的加载

所以我想知道hibernate是否做了一些预测性的缓存,比如提取它认为我以后可能需要的记录。有什么意见吗


谢谢。

这可能是由于以下原因执行的查询:

使用批处理获取,Hibernate可以加载几个未初始化的代理 如果访问了一个代理。批取是对 延迟选择抓取策略

类/实体的批量抓取更容易理解。考虑 以下示例:在运行时,有25个Cat实例加载到 一个会话,每只猫都有一个对它的主人,一个人的引用。这个 Person类映射为一个代理,lazy=“true”。如果你现在迭代 通过所有猫并在每个猫上调用getOwner(),Hibernate将 默认情况下,执行25条SELECT语句来检索代理的所有者。 可以通过在映射中指定批大小来调整此行为 个人:

<class name="Person" batch-size="10">...</class>
。。。
Hibernate现在只执行三个查询:模式是10,10, 五,


Hibernate本身不做任何预测性缓存,除了

但是,Hibernate可以简单地获取您请求的实体——例如,它获取急切关系的目标,并在惰性关系的情况下初始化访问的惰性代理

因此,如果所讨论的表作为某些关系的目标,您需要检查这些关系是否渴望,以及如果它们懒惰,您如何访问它们