一尘不染

HQL查询是否总是命中数据库并获得结果?

hibernate

我正在研究hibernate和何时使用的情况Criteria vs HQL,我的理解是,在hibernate中,每次我们通过一个实例CriteriaHQL两个实例查询数据库时,hibernate都会获取结果集并将其存储在内存中,然后当我们再次调用该查询时,数据将从内存中获取而不是访问该数据库,我的理解正确吗?

另外,正如您从下面提到的问题注释中看到的那样,建议Hibernate
Criteria从会话中获取数据,并且HQL始终会访问数据库,因此对HQL查询的任何多次调用都将访问数据库,如果这是这样一来,HQL问题就比解决还多。

请对此提供一些建议,以免与情况混淆。


阅读 196

收藏
2020-06-20

共1个答案

一尘不染

这取决于您要进行哪种查询以及有关缓存设置。

Hibernate具有三种缓存:会话缓存,查询缓存和2级缓存。会话缓存始终处于打开状态,但其他两个可以禁用。

通常,缓存并不是使用Criteria API而非HQL的原因,反之亦然。它们基本上只是本质上相同事物的不同接口。

参见http://www.javalobby.org/java/forums/t48846.htmlhttp://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html

2020-06-20