我定义了一个Versioned
接口,期望我可以在任何想要使用JPA版本控制功能的持久化实体上实现它(例如,针对空中冲突进行比较版本,在更新时自动递增)。JPA实体是否可以从接口方法继承@Version?
public interface Versioned {
@Version
int getRevision();
}
这不会节省很多(如果有的话)的编码,但它也给了我一个标记接口,我对以后的计划。
public class Foo implements Versioned {
private int revision;
@Override
public int getRevision() {
return revision;
}
}
@Version
被允许上的方法,和我预想的富沿用Versioned
界面特征。这似乎并非如此。我可以在数据库中更新我的Foo
实例,但版本号不会自动更改。
但是,如果我添加了一个@Version
注解实施,它将按预期工作:
@Version
private int revision;
我不会卡住 - 我能得到我所需要的功能。我只是好奇:是否有一个“窍门”让这个与接口方法的注解一起正常工作?或者可以有人指出我为什么这不起作用,如我所料?
是的,看起来像答案。很有意思。我有点惊讶,我从来没有遇到过这个。 – 2013-04-05 14:15:49
我不认为\ @Inherited与此有任何关系。 JPA可以选择在超类和接口中查找注释。而且,如果超类用\ @MappedSuperclass注释的话。虽然它不在界面上。这只是该规范的一个选择。 – 2013-04-05 14:19:05
@JBNizet,我认为Isaac希望注解继承能够在方法上工作,这就是为什么我给出了这个答案。我同意,JPA可以查看接口。 – WilQu 2013-04-05 14:28:04