hibernate - Hibernate 的二级缓存是否/可以用于 COUNT() 操作?

标签 hibernate jpa ehcache second-level-cache

当使用 Hibernate 和 Ehcache 作为二级缓存 (2LC) 实现时,是否(或可以)在使用 WHERE 子句执行 COUNT 操作时使用此缓存?

在 SQL 术语中,我正在执行的查询是 SELECT COUNT(id) FROM table WHERE someColumn > 100。在某些情况下,每次传递的值都不同,有时它总是相同的。

我假设这超出了 2LC 的范围,而是需要“手动”管理(缓存查询结果,并在底层数据发生变化时使缓存失效)。

最佳答案

你是对的,这超出了 L2 缓存提供的范围。然而query cache会成功的。

基本上,Hibernate 会将命名参数(在您的示例中为 [100] 元组)和查询结果之间的映射缓存在名为 org.hibernate.cache.StandardQueryCache 的缓存中.当对 table(更准确地说:查询中使用的任何表)进行任何更改时,它也会使缓存无效。每个表的最后修改时间存储在 org.hibernate.cache.UpdateTimestampsCache 缓存中。

另见:

关于hibernate - Hibernate 的二级缓存是否/可以用于 COUNT() 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712066/

相关文章:

java - 有什么方法可以找出(在运行时)哪个实体导致了 ConstraintViolationException?

java - MySQL 上的@GeneratedValue 多态抽象父类(super class)

hibernate - 如何获取 grails hibernate L2 缓存统计信息?

Java ehcache 磁盘存储

java - 如果实体名称保存在变量中,如何编写 hibernate 插入查询

java - 不能在一对多关系 hibernate 注释中插入空值

hibernate - 如何检查大写和小写的字符串

java - Hibernate JPA 2 元模型生成器在与 Spring Roo 一起使用时忽略字段

mysql - 如何使用JPA和MySQL生成序列号?

java - tomcat 4节点中的ehcache实现