可以用XML进行这种映射吗?

时间:2012-11-06 17:30:07

标签: hibernate hibernate-mapping

我在这里为我的任务找到了解决方案: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 { ...

1 个答案:

答案 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                          |
+------------------------------+

希望这会有所帮助。顺便说一句,我仍然想知道你没有使用注释解决这个问题的原因是什么,因为你有解决方案,只是好奇:)。