【发布时间】:2014-08-22 16:44:52
【问题描述】:
我正在尝试配置一个新的数据库设计,因为我们决定迁移到休眠模式。以前在我的 java 代码中,我有以下三个类
超类
public abstract class Card {
private String firstname;
private String lastname;
private String email;
...
}
卡片子类
public class ContactCard extends Card{
private String variable1;
private String variable2;
private String variable3;
public ContactCard(){
super(firstname, lastname, email);
...
}
}
还有其他一些人跟随。这似乎工作正常。但是我开始有点困惑。这里我们有 is a 关系中的子类,一些卡片 is a 卡片。不过,我无法将其映射到数据库表中。
例如,为了将卡片表的过程合并到数据库中,我可以为每个子类类型创建一个表,并且在这个表中我可以有一个引用卡片表的 id(它是在用户注册时生成的) )。但是,这现在意味着在我的数据库中,我已经将 is a 关系转换为 has a? 子类现在有一张卡片,而不是一张卡片。
我很困惑,希望有人能帮我解决问题。
谢谢
【问题讨论】:
-
关系型数据库没有继承的概念。所以你必须选择一种使用关系概念来表示继承的方法。有 3 种策略,在文档 docs.jboss.org/hibernate/core/4.3/manual/en-US/html_single/… 中有详细描述。如果数据库直接理解对象,则不需要 ORM,它的作用正是将对象概念映射到关系概念,反之亦然。