Java5/6中注释的注释

Java5/6中注释的注释,java,hibernate,jpa,annotations,Java,Hibernate,Jpa,Annotations,我正在设置Hibernate缓存,希望缓存不同区域中的某些实体。例如,有些实体可能“过时”长达5分钟,有些长达一小时,有些(如查找)在数周内不会更改。为了便于在代码中轻松配置区域,我尝试以下操作: 我创建了一个名为@LookupCache(和@DailyCache等)的注释 我正在将该注释添加到我的Hibernate/JPA实体中: @LookupCache public class Course {} 这样,我就可以轻松地更改@LookupCache的区域或属性,而无需更改每个类的注释参数

我正在设置Hibernate缓存,希望缓存不同区域中的某些实体。例如,有些实体可能“过时”长达5分钟,有些长达一小时,有些(如查找)在数周内不会更改。为了便于在代码中轻松配置区域,我尝试以下操作:

我创建了一个名为
@LookupCache
(和
@DailyCache
等)的注释

我正在将该注释添加到我的Hibernate/JPA实体中:

@LookupCache
public class Course {}
这样,我就可以轻松地更改
@LookupCache
的区域或属性,而无需更改每个类的注释参数

但是,缓存加载器不会拾取此继承的
@cache
符号。如何让
@LookupCache
注释继承应用于它的注释


更新:为了澄清,@Cache注释是一个内置的hibernate注释,由二级缓存(如EHCache)使用。我无法修改@Cache注释以使其可由其他注释继承(我的客户端不希望维护hibernate的特殊分支)。这可能是我唯一的选择。

下面是一个简单的示例,演示如何检索应用于@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());

您只需确保@Cache annotation还具有@Retention(RetentionPolicy.RUNTIME)

恐怕注释不是这样工作的。没有像您所寻找的那样的“继承”,而是由Hibernate显式地完成,这不会发生,因为它是一个自定义注释。DRY就到此为止。谢谢。这是我正在寻找的阅读注解的收据!因为getClass().getAnnotations()正在返回代理!
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());