你好吗?你能说一下如何从iheritors创建数据库中的表(不是用带有descriminators的继承者创建一个基类表)? 例如: 我有基础抽象类:
public abstract class Person
{
public string Name;
}
和一些继承人喜欢:
public class Student : Person
public string University;
}
public class Driver : Person
{
public string CarName;
}
我在DataBase Tables中需要: 学生: -ID -名称 -University
和司机: -ID -名称: -CarName
答案 0 :(得分:2)
您似乎在谈论“每个具体子类的表”。这种方法不需要鉴别器,但要求列名在单独的表之间是通用的(在内部,它通过UNION获取)。
我会注意到你的“人,司机,学生”的例子可能是一个不正确的设计 - 因为同一个人都一个司机和一个学生。
我假设您要保留STUDENT和DRIVER表设计,这很简单,并且您并不真正需要基于角色的统一系统,其中Person - >司机和人 - >学生被表示为关系。
按照这个假设,您可以:
完全从Hibernate映射中删除公共超类Person - 因为它不会真正正确地检索“所有人”,因为驱动程序和学生都将被复制;和/或
将公共超类'Person'替换为接口'IPersonInfo',而不是由Hibernate映射;或者,
弱化超类'Person'的定义&将其重命名为'PersonInfo',因此它不再暗示身份(因为不再保证每个唯一记录都是一个唯一的人)。
如果这不是玩具设计&你想要准确地建模这个或更广泛的系统,你必须正确设计模型:
4)将“人”实体与他们可以拥有的角色分开。学生,驱动程序等然后从 Role (可能是一个抽象类,它可以由Hibernate映射)下载。然后角色与Person相关/相关,可以是几个0..1,也可以是角色的大包。