假设我们有一个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上的继承。
任何帮助都会非常感激。提前谢谢。
答案 0 :(得分:0)
所以这里你使用的是每个具体类的表,并且将B作为超类,你可以使用hibernate提供的泛化功能。
在hibernate中,有三种不同的方式可以表示继承。
<强> 1。每个类层次结构的表
<强> 2。每个子类的表
第3。具体类别表
由于您使用的是table per concrete
类,因此您需要按照以下
<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是参考链接,