2011-05-05 46 views
7

我发现了我想编写的JPA映射中的模式。一个简单的例子如下:使用AspectJ将一个注解转换为许多注释

@OneToMany(fetch=FetchType.EAGER) 
@Sort(type=SortType.NATURAL) 
private SortedSet<Item> items; 

我想创建一个名为SortedOneToMany一个注释,我可以向上面的设置:

public @interface SortedOneToMany { 
    FetchType fetch() default EAGER; 
    SortType sort() default NATURAL; 
    Class comparator() default void.class; 
} 

我写了下面的方面,以“附加”的JPA每当它看到我的注解注释:

public aspect SortedOneToManyAspect { 
    declare @field: @SortedOneToMany * * : @OneToMany(fetch=FetchType.EAGER); 
    declare @field: @SortedOneToMany * * : @Sort(type=SortType.NATURAL); 
} 

但我不知道我怎么可以访问SortedOneToMany注释参数的值,并用它们定义OneToMan时y和排序注释。可能有,我想改变,像这样的默认值中的一个情况:

@SortedOneToMany(sort=SortType.COMPARATOR,comparator=ItemComparator.class) 
private SortedSet<Item> items; 

所以,我怎么能传递从SortedOneToMany注释值排序的注释?

回答

1

我对AspectJ的用户收到此答案由安迪·克莱门特邮件列表:

嗨,

恐怕你不能做到这一点与AspectJ的,现在,你不能将 段的匹配信息传递给新的注释。我可以或许 想象的一些假设的语法:

DECLARE @field: @SortedOneToMany(排序= SortType.COMPARATOR,比较= {1})* *: @Sort(类型= SortType.COMPARATOR,比较= {1 });

这似乎达到你想要的。

可能引发一个增强请求为它: https://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ

抱歉,我没有更好的消息。

欢呼 安迪

我创建了一个票的情况下,任何人想要遵循进度问题:https://bugs.eclipse.org/bugs/show_bug.cgi?id=345515