Hibernate命名查询存储在数据库还是缓存中?

3

我们的项目中使用了Hibernate。我的问题是关于命名查询的。有人可以指导一下Hibernate如何处理命名查询吗?如果Hibernate被配置为使用级别1缓存,它是否也会从缓存中返回命名查询的结果,还是总是要到数据库中进行查询?

1个回答

3
一级缓存是Hibernate会话。除非使用无状态会话的极少数情况,否则默认情况下存在一级缓存。查询结果从不在一级缓存中缓存。我认为你指的是“二级缓存”。
命名查询与未命名查询在缓存方面处理方式完全相同。
查询可以被缓存也可以不被缓存。如果它们被缓存,可以避免到数据库的往返。无论它们是否被缓存,如果它们返回的实体实例已经在二级缓存中,则查询将返回ID,然后这些实体本身将从二级缓存中加载。
有关更多信息,请参见《Grails应用程序中的Hibernate第二级缓存》《参考文档》

谢谢Nizet。对不起,是的,我是指二级缓存。我会尽量解释得更清楚一些。我有一个实体,我的命名查询是基于两个参数选择实体。所以在这种情况下,Hibernate会从缓存还是数据库中选择呢? - java_buzz
它从不从缓存中选择。 它会访问数据库,如果查询可缓存,则将其结果存储在查询缓存中。 如果您使用相同的参数再次执行相同的查询,则结果将从查询缓存中加载。 - JB Nizet
感谢您的帮助Nizet。查询缓存应设置为true,以便为查询实现缓存,否则每次都会访问数据库。 - java_buzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接