0

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

A类休眠映射文件:

<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>

我试图弄清楚我应该在上面显示的休眠文件中包含什么,以便我可以将可能包含 C、D 和 E 类对象的listOfBs存储在数据库中,因此listOfBs上的每个对象都应该转到适当的数据库中的表。请注意,我使用具有隐式多态策略的每个具体类的表来映射休眠上的继承。

任何帮助将不胜感激。提前致谢。

4

1 回答 1

0

因此,在这里您使用每个具体类的表并将 B 作为超类,您可以使用休眠提供的泛化功能。

在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>

是参考链接,

于 2013-06-25T12:16:28.217 回答