我正在设置Hibernate缓存,并希望缓存不同区域中的某些实体。例如,一些实体可能会“陈旧”长达5分钟,一些实体可能会“陈旧”一小时,而有些实体(比如查找)几周内都不会改变。为了在我的代码中方便地配置区域,我尝试了以下方法:
我创建了一个名为@LookupCache (和@DailyCache等)的注释。
@Cache(region = "lookups", usage = CacheConcurrencyStrategy.READ_ONLY)
@Retention(RetentionPolicy.RUNTIME)
public @interface LookupCache {}我将该注释添加到我的Hibernate/JPA实体中:
@LookupCache
public class Course {}这样,我就可以轻松地更改@LookupCache的区域或属性,而不必更改每个类的注释参数。
但是,缓存加载器不会采用这种继承的@Cache表示法。如何让@LookupCache批注继承应用于它的批注?
更新:为了澄清,@Cache注解是一个内置的hibernate注解,由EHCache等二级缓存使用。我不能修改@Cache注解以使其可由其他注解继承(我的客户不想维护一个特殊的hibernate分支)。不过,这可能是我唯一的选择。
发布于 2009-12-03 10:17:05
下面是一个简单的示例,展示了如何检索应用于@LookupCache注释的@Cache注释的详细信息:
Course c = new Course();
LookupCache lookupCache = c.getClass().getAnnotation(LookupCache.class);
Cache cache = lookupCache.annotationType().getAnnotation(Cache.class);
System.err.println("region " + cache.region());
System.err.println("usage " + cache.usage());你只需要确保@缓存注解也有@Retention(RetentionPolicy.RUNTIME)
https://stackoverflow.com/questions/1798401
复制相似问题