Hibernate如何在连接的子类中进行区分
假设我有实体模型的以下情况,并使用Hibernate 3.6:Hibernate如何在连接的子类中进行区分,hibernate,Hibernate,假设我有实体模型的以下情况,并使用Hibernate 3.6: Person |__ Student |__ SchoolBoy |__ CollegeStudent 数据库中的表是tperson和tstudent。在使用hibernate映射文件时,我在Person实体定义中声明如下: <joined-subclass name="Student" table="tstudent"> <key column="
Person
|__ Student
|__ SchoolBoy
|__ CollegeStudent
数据库中的表是tperson和tstudent。在使用hibernate映射文件时,我在Person实体定义中声明如下:
<joined-subclass name="Student" table="tstudent">
<key column="id_person" />
</joined-subclass>
作为一个与大学生相似的小学生,我想对这两个班级(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>
Hibernate文档说明: Hibernate不支持在同一根
元素下混合
和
映射。通过组合
和
元素,可以在同一
元素下混合每个层次结构的表和每个子类的表策略
在您的情况下,您需要将discriminator列移动到tperson
表中,并使用join元素向学生类添加额外的属性
...
...
您也可以在学生子类元素中为所有学生共有的属性添加一个联接请共享完整的映射我稍后会在我有时间查找详细信息时跟进,但我通过在Person和Student之间交换合成的继承来解决这个问题——在本例中,作为一名学生仅仅是个人的一个角色。更新了我的映射文件的更多细节@mabi如果你有一个解决方案,如果你在我的代码中发布一些示例,我将不胜感激。我知道不可能混合类继承类型,但是,我没有注意到在不同级别混合鉴别器值的可能性。那绝对值得赏金。如果你能看看我正在处理的一个案子,我将不胜感激。