Gai*_*aim 5 java polymorphism database-design jpa
有一种情况.例如,我正在设计简单的博客.有文章和照片.用户可以将他们的评论添加到他们两个.所以当我用Java编写它时,它看起来像这样:
public interface Commentable { ... }
public class Article implements Commentable { ... }
public class Photo implements Commentable { ... }
public class Comment {
...
private Commentable commentTo;
}
Run Code Online (Sandbox Code Playgroud)
这很清楚,我希望设计是正确的.但现在我想将它保存在数据库中,我想使用JPA注释.主要是我必须使用JPA 1.0,但如果没有解决方案,我想知道如何在JPA 2.0中使用它.我发现有一种经典继承的方法,但我认为Commentable不应该是这些对象的父级,它只是根据设计的扩展.
有没有办法如何在不改变设计的情况下坚持下去,拜托?非常感谢
请问如何在不改变设计的情况下坚持下去?非常感谢
JPA并不真正支持您的设计(确切地说,如果存在单个实现,您可以映射指向接口的关系,但这不是您的情况).您的JPA提供程序可能对此有一些支持(例如EclipseLink有一个@VariableOneToOne注释).
使用标准JPA,通常的方法是使用抽象类(使用或不使用您的接口)并使用继承.例如(保持界面):
public class Comment {
...
@OneToOne(targetEntity=MyAbstractBaseClass.class)
private Commentable commentTo;
}
Run Code Online (Sandbox Code Playgroud)
在哪里Article和Photo将扩展MyAbstractBaseClass和实现接口.
JPA wikibook在这个主题上有两个很好的部分,见下文.
| 归档时间: |
|
| 查看次数: |
3016 次 |
| 最近记录: |