我正在研究hibernate和何时使用的情况Criteria vs HQL,我的理解是,在hibernate中,每次我们通过一个实例Criteria或HQL两个实例查询数据库时,hibernate都会获取结果集并将其存储在内存中,然后当我们再次调用该查询时,数据将从内存中获取而不是访问该数据库,我的理解正确吗?
Criteria vs HQL
Criteria
HQL
另外,正如您从下面提到的问题注释中看到的那样,建议Hibernate Criteria从会话中获取数据,并且HQL始终会访问数据库,因此对HQL查询的任何多次调用都将访问数据库,如果这是这样一来,HQL问题就比解决还多。
请对此提供一些建议,以免与情况混淆。
这取决于您要进行哪种查询以及有关缓存设置。
Hibernate具有三种缓存:会话缓存,查询缓存和2级缓存。会话缓存始终处于打开状态,但其他两个可以禁用。
通常,缓存并不是使用Criteria API而非HQL的原因,反之亦然。它们基本上只是本质上相同事物的不同接口。
参见http://www.javalobby.org/java/forums/t48846.html和http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html