Hibernate在继承者的db中创建表

时间:2013-09-12 04:19:14

标签: hibernate nhibernate jpa

你好吗?你能说一下如何从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

1 个答案:

答案 0 :(得分:2)

您似乎在谈论“每个具体子类的表”。这种方法不需要鉴别器,但要求列名在单独的表之间是通用的(在内部,它通过UNION获取)。

请参阅:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/inheritance.html#inheritance-tablepersubclass

我会注意到你的“人,司机,学生”的例子可能是一个不正确的设计 - 因为同一个人一个司机和一个学生。

我假设您要保留STUDENT和DRIVER表设计,这很简单,并且您并不真正需要基于角色的统一系统,其中Person - >司机和人 - >学生被表示为关系。

按照这个假设,您可以:

  1. 完全从Hibernate映射中删除公共超类Person - 因为它不会真正正确地检索“所有人”,因为驱动程序和学生都将被复制;和/或

  2. 将公共超类'Person'替换为接口'IPersonInfo',而不是由Hibernate映射;或者,

  3. 弱化超类'Person'的定义&将其重命名为'PersonInfo',因此它不再暗示身份(因为不再保证每个唯一记录都是一个唯一的人)。

  4. 如果这不是玩具设计&你想要准确地建模这个或更广泛的系统,你必须正确设计模型:

    4)将“人”实体与他们可以拥有的角色分开。学生,驱动程序等然后从 Role (可能是一个抽象类,它可以由Hibernate映射)下载。然后角色与Person相关/相关,可以是几个0..1,也可以是角色的大包。