根据其记录的类将单个列表映射到各个表

时间:2013-06-24 17:33:07

标签: java hibernate polymorphism hibernate-mapping

假设我们有一个A类,它有一个B类对象列表(List<B> listOfBs )。在数据库设计中,这意味着表示类B的表应该有一个外键引用表示类A的表行。现在,类B是类C,D和E的超类。 我的类A的hibernate映射文件如下所示,适用于将A类条目存储到数据库中,同时也可以级联包含在类A列表中的B类的多个条目。

A类Hibernate映射文件:

<hibernate-mapping package="..."> 
    <class name="A" table="table_of_A"> 
        <id name="key" column="A_ID"> 
            <generator class="native"/> 
        </id> 
        <property name="...." type="long"/>
        <property name="...." type="string"/>
        <list name="listOfBs" access="field" cascade="all">
               <key column="A_ID" not-null="true" />
               <list-index column="idx"/>
               <one-to-many class="B"/>
        </list>
    </class> 
</hibernate-mapping>

我试图找出我应该包含在上面显示的hibernate文件中的内容,这样我就可以在数据库中存储 listOfBs ,它可能包含C,D和E类的对象,因此每个 listOfBs 上的对象应该转到数据库中的相应表。 请注意,我使用带有隐式多态策略的每个具体类的表来映射hibernate上的继承。

任何帮助都会非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

所以这里你使用的是每个具体类的表,并且将B作为超类,你可以使用hibernate提供的泛化功能。

在hibernate中,有三种不同的方式可以表示继承。

<强> 1。每个类层次结构的表

<强> 2。每个子类的表

第3。具体类别表

由于您使用的是table per concrete类,因此您需要按照以下

更改B类映射
<class name="B">
<id name="id" column="ID">
    <generator class="sequence"/>
</id>
<property name="name" column="NAME"/>
<union-subclass name="C" table="C">
    <property name="${properties}" column="collumns"/>
</union-subclass>
<union-subclass name="D" table="D">
    <property name="${properties}" column="collumns"/>
</union-subclass>
<union-subclass name="E" table="E">
    <property name="${properties}" column="collumns"/>
</union-subclass>
</class>

This是参考链接,