1

我有一个用 JPA 表示的用户对象,它具有特定的子类型。例如,想想用户,然后是一个子类 Admin,以及另一个子类 Power User。

假设我有 10 万用户。我已经使用 Ehcache 成功实现了二级缓存,以提高性能并验证它是否有效。 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html#performance-cache

我知道当您调用 load 方法时它确实有效(即,您从缓存中加载对象而不是调用 sql 查询)。我已经通过休眠级别的日志验证了这一点,并验证了它是否更快。

但是,我实际上想选择所有用户的一个子集......例如,假设我想计算有多少高级用户。

此外,我的用户有一个关联的 ZipCode 对象……ZipCode 对象也是二级缓存……我想要做的实际上是能够询问诸如……我在 New 中有多少高级用户约克州...

但是,我的问题是......我如何编写一个查询来执行此操作,该查询将访问二级缓存而不是数据库。请注意,我的二级缓存配置为读/写...因此,当新用户添加到系统中时,它们应该自动添加到缓存中...另外...请注意,我已经简要调查了查询缓存,但是我不确定它是否适用,因为这适用于多次运行的查询……我的问题更多的是……数据无论如何都应该在二级缓存中,所以我该怎么做才能使当我编写查询时,数据库没有受到影响。

干杯,布赖恩

4

1 回答 1

0

(...)无论如何,数据都应该在二级缓存中,所以我该怎么做才能在我编写查询时数据库不会受到影响。

如果查询返回的实体被缓存,请查看Query#iterate(). 这将触发第一个查询以检索 ID 列表,然后触发每个 ID 的后续查询......这将命中 L2 缓存。

于 2010-11-10T15:33:08.307 回答