Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用hibernate正确映射嵌套的子类_Java_Hibernate_Orm_Hibernate Mapping_Table Per Hierarchy - Fatal编程技术网

Java 如何使用hibernate正确映射嵌套的子类

Java 如何使用hibernate正确映射嵌套的子类,java,hibernate,orm,hibernate-mapping,table-per-hierarchy,Java,Hibernate,Orm,Hibernate Mapping,Table Per Hierarchy,如何用Hibernate嵌套子类 例如,我有以下类层次结构: PageElement - PageParagraph - PageImage - PageVideo - PageAudio - PageQuestion - PageFillInTheBlankQuestion - PageOpenEndedQuestion - PageMultipleChoiceQuestion - ... 这是理想的对象结构。我如何使用Hibernate成功地映射它?我想说,PageQues

如何用Hibernate嵌套子类

例如,我有以下类层次结构:

PageElement
- PageParagraph
- PageImage
- PageVideo
- PageAudio
- PageQuestion
  - PageFillInTheBlankQuestion
  - PageOpenEndedQuestion
  - PageMultipleChoiceQuestion
  - ...

这是理想的对象结构。我如何使用Hibernate成功地映射它?我想说,
PageQuestion
抽象类非常重要。它包含许多可重用的属性和逻辑。我还需要特别引用
PageQuestion
,而不是引用
PageElement
,这正是对象和关系范式之间的问题

Hibernate是实现这一点的工具。在这里,你已经有了这方面的参考资料


这正是对象和关系范式之间的问题

Hibernate是实现这一点的工具。在这里,你已经有了这方面的参考资料

在Hibernate 4.0(可能更早)中,如果您使用的是表/层次结构模型,则可以使用嵌套元素

示例类结构:

Word (has property "text", string)
- Subject (adds property "plural", boolean)
  - Pronoun (adds property "masculine", boolean)
  - ProperNoun (adds property "person", boolean)
- Verb (adds property "past_tense", boolean)
Hibernate映射XML示例:

<class name="test.Word" table="words">
    <id name="id"><generator class="native"/></id>
    <discriminator column="word_type" type="string"/>
    <property name="text"/>
    <subclass name="test.Subject">
        <property name="plural"/>
        <subclass name="test.ProperNoun">
            <property name="person"/>
        </subclass>
        <subclass name="test.Pronoun">
            <property name="masculine"/>
        </subclass>
    </subclass>
    <subclass name="test.Verb">
        <property name="past_tense"/>
    </subclass>
</class>
数据库最终包含以下信息:

id, word_type, text, plural, person, masculine, past_tense,
1, test.Word, blue, NULL, NULL, NULL, NULL
2, test.Subject, chairs, 1, NULL, NULL, NULL
3, test.ProperNoun, James, 0, 1, NULL, NULL
4, test.Pronoun, he, 0, NULL, 1, NULL
5, test.Verb, sat, NULL, NULL, NULL, 1
查询返回的对象列表将得到正确的类型:

    HibernateUtil.beginTransaction();
    List<Word> words = HibernateUtil.getCurrentSession().createCriteria(Word.class).list();
    for (Word w:words)
        System.out.println(w);
    HibernateUtil.commitTransaction();
请参阅的第10.1.1节(虽然它与旧文档基本相同),但遗憾的是,它没有明确指出允许嵌套子类——但这是一件很容易尝试的事情

我同意Hibernate文档组织得很差。一切都在那里,但我发现它的组织方式让我很难找到完整的信息;主要原因是过度使用交叉引用,以及面向用例的布局并不总是覆盖所有基础。但是,信息是存在的。

在Hibernate 4.0(可能更早)中,如果您使用的是表/层次模型,则可以使用嵌套元素

示例类结构:

Word (has property "text", string)
- Subject (adds property "plural", boolean)
  - Pronoun (adds property "masculine", boolean)
  - ProperNoun (adds property "person", boolean)
- Verb (adds property "past_tense", boolean)
Hibernate映射XML示例:

<class name="test.Word" table="words">
    <id name="id"><generator class="native"/></id>
    <discriminator column="word_type" type="string"/>
    <property name="text"/>
    <subclass name="test.Subject">
        <property name="plural"/>
        <subclass name="test.ProperNoun">
            <property name="person"/>
        </subclass>
        <subclass name="test.Pronoun">
            <property name="masculine"/>
        </subclass>
    </subclass>
    <subclass name="test.Verb">
        <property name="past_tense"/>
    </subclass>
</class>
数据库最终包含以下信息:

id, word_type, text, plural, person, masculine, past_tense,
1, test.Word, blue, NULL, NULL, NULL, NULL
2, test.Subject, chairs, 1, NULL, NULL, NULL
3, test.ProperNoun, James, 0, 1, NULL, NULL
4, test.Pronoun, he, 0, NULL, 1, NULL
5, test.Verb, sat, NULL, NULL, NULL, 1
查询返回的对象列表将得到正确的类型:

    HibernateUtil.beginTransaction();
    List<Word> words = HibernateUtil.getCurrentSession().createCriteria(Word.class).list();
    for (Word w:words)
        System.out.println(w);
    HibernateUtil.commitTransaction();
请参阅的第10.1.1节(虽然它与旧文档基本相同),但遗憾的是,它没有明确指出允许嵌套子类——但这是一件很容易尝试的事情


我同意Hibernate文档组织得很差。一切都在那里,但我发现它的组织方式让我很难找到完整的信息;主要原因是过度使用交叉引用,以及面向用例的布局并不总是覆盖所有基础。但是,信息就在那里。

我知道了如何使用每个层次结构模式的表来完成它。奇怪的是,hibernate文件与该文档中显示的示例完全不同。文档还不够详尽。我找到了如何使用每个层次结构的表模式。奇怪的是,hibernate文件与该文档中显示的示例完全不同。文件不够详尽。