解释Hibernate查询缓存

时间:2014-05-03 02:16:13

标签: java hibernate caching

我在http://www.javalobby.org/java/forums/t48846.html中阅读了解释Hibernate Query Cache的文章,但我无法完全理解它是如何工作的。

正如文章解释:

Query query = session.createQuery("from Person as p where p.parent.id=? and p.firstName=?");
query.setInt(0, Integer.valueOf(1));
query.setString(1, "Joey");
query.setCacheable(true);
List l = query.list();

查询缓存的工作方式如下:

*----------------------------------------------------------------------------------------*
|                                    Query Cache                                         |
|----------------------------------------------------------------------------------------|
| ["from Person as p where p.parent.id=? and p.firstName=?", [ 1 , "Joey"] ] -> [  2 ] ] |
*----------------------------------------------------------------------------------------*

查询和作为该查询的参数提供的值的组合用作键,值为该查询的标识符列表。 < / p>

问题1 :此处有哪些标识符?它们是查询结果中的实体ID吗?

问题2: Hibernate的文档说

  

例如,如果您针对对象缓存查询结果,   Hibernate需要跟踪是否有任何更改   针对该对象提交,并相应地使缓存无效

如果问题1的答案为YES(它们是查询结果中的实体ID),这是否表示上次更新表时缓存的保留时间戳,并决定在需要时刷新缓存?

1 个答案:

答案 0 :(得分:0)

  1. 缓存会跟踪给定缓存条目所依赖的表。当更新任何这些表时(任何行或行,无论它们是否影响特定的缓存结果),缓存条目都将失效。这意味着下次查询+参数再次发生时,它将导致数据库查询,而不是从查询缓存中提取结果。