5

假设我有以下实体模型案例并使用 Hibernate 3.6:

Person
    |__ Student
            |__ SchoolBoy
            |__ CollegeStudent

我的数据库中的表是tpersontstudent。当我使用休眠映射文件时,我在我的 Person 实体定义中声明如下:

<joined-subclass name="Student" table="tstudent">
    <key column="id_person" />
</joined-subclass>

作为类似于 CollegeStudent 的 SchoolBoy,我想为两者(tstudent)使用同一个表,有一个学生类型的鉴别器列,同时我保留两个类。我的问题是,一旦您进入连接子类,Hibernate 似乎不允许鉴别器列。

有解决方法吗?

更新

这就是我现在所拥有的:

<class name="Person">
    <id name="Id" column="id" type="integer">
        <generator class="increment" />
    </id>
    <joined-subclass name="Student" table="tstudent">
        <key column="id_person" />
        <joined-subclass name="SchoolBoy" table="tschoolboy">
            <key column="id_person" />
        </joined-subclass>
        <joined-subclass name="CollegeStudent" table="tcollegestudent">
            <key column="id_person" />
        </joined-subclass>
    </joined-subclass>
</class>

这就是我想在映射的连接部分中拥有的:

<joined-subclass name="Student" table="tstudent">
    <key column="id_person" />
    <discriminator column="student_type" />
    <subclass name="SchoolBoy" discriminator-value="SCHOOL_BOY" />
    <subclass name="CollegeStudent" discriminator-value="COLLEGE_STUDENT" />
</joined-subclass>
4

1 回答 1

7

休眠文档说:

Hibernate 不支持同一根元素下的混合<subclass>和映射。通过组合和元素,可以在同一元素下将每个层次结构的表和每个子类的表策略混合在一起<joined-subclass><union-subclass><class><class><subclass><join>

在您的情况下,您需要将鉴别器列移动到tperson表中并使用连接元素为您的学生班级添加额外的属性。

<class name="Person" table="tperson" discriminator-value="PERSON">
    <id name="Id" column="id" type="integer">
        <generator class="increment" />
    </id>
    <discriminator column="person_type" />
    <subclass name="Student" discriminator-value="STUDENT">
        <key column="id_person" />
        <subclass name="SchoolBoy" discriminator-value="SCHOOL_BOY">
            <join table="tstudent">
                <key column="id_person" />
                ...
            </join>
        </subclass>
        <subclass name="CollegeStudent" discriminator-value="COLLEGE_STUDENT">
            <join table="tstudent">
                <key column="id_person" />
                ...
            </join>
        </subclass>
    </subclass>
</class>

您还可以在 Student 子类元素中为所有学生共有的属性添加连接

于 2013-07-08T11:41:41.710 回答