1

你好你能说一下如何在数据库中从iheritors创建表(不是为基类创建一个表,继承者和描述符)?例如:我有基础抽象类:

public abstract class Person
{
      public string Name;

}

一些继承者喜欢:

 public class Student : Person 

    public string University;

 }

 public class Driver : Person 
 {
    public string CarName;

 }

我需要在数据库表中:学生:-id -Name -University

和驱动程序:-id -Name:-CarName

4

1 回答 1

2

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

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

我会注意到您的“人、司机、学生”示例可能是不正确的设计——因为同一个人可以既是司机又是学生。

我假设您希望保留 STUDENT 和 DRIVER 表设计,这很简单,并且您并不真正想要一个统一的基于角色的系统,其中 Person -> Driver 和 Person -> Student 表示为关系。

根据该假设,您可以:

  1. 从 Hibernate 映射中完全删除公共超类 Person —— 因为通过它检索“所有人”并不真正正确,因为既是 Drivers 又是 Student 的人将被复制;和/或

  2. 用 Hibernate 未映射的接口“IPersonInfo”替换通用超类“Person”;或者,

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

如果这不是玩具设计,并且您想准确地建模这个或更广泛的系统,您必须正确设计模型:

4) 将“人”实体与他们可以拥有的角色分开。Student、Driver 等然后从Role下降(可能是一个抽象类,所以它可以被 Hibernate 映射)。然后将角色与 Person 关联/关联,或者通过几个 0..1 或作为一大包角色。

于 2013-09-12T04:29:51.817 回答