Java 如何在JPA中定义多态性
有一种情况。例如,我正在设计简单的博客。有文章和照片。用户可以将他们的评论添加到两者中。所以当我用Java编写它时,它看起来是这样的:Java 如何在JPA中定义多态性,java,database-design,jpa,polymorphism,Java,Database Design,Jpa,Polymorphism,有一种情况。例如,我正在设计简单的博客。有文章和照片。用户可以将他们的评论添加到两者中。所以当我用Java编写它时,它看起来是这样的: public interface Commentable { ... } public class Article implements Commentable { ... } public class Photo implements Commentable { ... } public class Comment { ... privat
public interface Commentable { ... }
public class Article implements Commentable { ... }
public class Photo implements Commentable { ... }
public class Comment {
...
private Commentable commentTo;
}
这很清楚,我希望设计是正确的。但现在我想将其持久化到数据库中,并希望使用JPA注释。首先,我必须使用JPA1.0,但如果没有解决方案,我想知道如何在JPA2.0中使用它。我发现经典继承有一种方法,但我认为Commentable不应该是这些对象的父对象,它只是设计方面的扩展
请问有没有办法在不改变设计的情况下坚持下去?非常感谢
请问,有没有办法在不改变设计的情况下坚持下去?非常感谢
JPA并不真正支持您的设计(确切地说,如果只有一个实现,您可以映射指向接口的关系,但情况并非如此)。您的JPA提供商可能对此有一些支持(例如EclipseLink有一个@VariableOneToOne
注释)
对于标准JPA,通常的方法是使用抽象类(带或不带接口)和继承。例如(保留接口):
其中,Article
和Photo
都将扩展MyAbstractBaseClass
并实现接口
JPA维基百科有两个关于这个主题的好章节,见下文
资源
- JPA维基百科:
public class Comment {
...
@OneToOne(targetEntity=MyAbstractBaseClass.class)
private Commentable commentTo;
}