我在这里为我的任务找到了解决方案:mixing-joined-and-single-table-inheritance。 问题包含混合两个继承策略的示例:用单个表连接。 但是,是否可以将此注释映射转换为XML映射?
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "animals")
public abstract class Animal { ...
@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
public abstract class Mammal extends Animal { ...
@Entity
@Table(name = "mammals")
@PrimaryKeyJoinColumn(name = "mammal_id")
@DiscriminatorValue(value = "dog")
public class Dog extends Mammal { ...
@Entity
@Table(name = "mammals")
@PrimaryKeyJoinColumn(name = "mammal_id")
@DiscriminatorValue(value = "cat")
public class Cat extends Mammal { ...
答案 0 :(得分:1)
抱歉昨天我刚发布了一些从一级继承概念化的代码摘录。 您遇到的问题是由
引起的 <discriminator column="type" type="string"/>
不能放在&lt; subclass&gt;下和&lt; joint-subclass&gt;无法嵌套。我今天尝试运行类似的代码来实现您可能需要的功能。我试着把&lt; join&gt;在&lt; subclass&gt;下模拟&lt; joint-subclass&gt;,但&lt; discriminator&gt;不会以这种方式工作。
所以我唯一想到的就是在动物和哺乳动物之间建立一对一的联系。这是我尝试的代码,这个概念可能看起来很尴尬。
<hibernate-mapping>
<class name="bean.Animal" table="animal">
<id name="id" type="java.lang.Integer">
<column name="id" length="50" scale="0" />
</id>
<many-to-one name="mammal"
column="mammal_id"
not-null="true"/>
</class>
<class name="bean.Mammal" table="mammal">
<id name="mammal_id" type="java.lang.Integer">
<column name="mammal_id" length="50" scale="0" />
</id>
<discriminator column="type" type="string"/>
<subclass name="bean.Dog" extends="bean.Mammal" discriminator-value="dog">
</subclass>
<subclass name="bean.Cat" extends="bean.Mammal" discriminator-value="cat">
</subclass>
</class>
结果表是:
+------------------------------+ |Tables | +------------------------------+ |animal | |mammal | +------------------------------+
这些表中的模式是
+------------------------------+ |animal | +------------------------------+ |id | |mammal_id | +------------------------------+ +------------------------------+ |mammal | +------------------------------+ |mammal_id | |type | +------------------------------+
希望这会有所帮助。顺便说一句,我仍然想知道你没有使用注释解决这个问题的原因是什么,因为你有解决方案,只是好奇:)。