`
txidol
  • 浏览: 54338 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate学习笔记(六)【映射继承关系】

阅读更多

场景有个User类,然后扩展出了Student类和Teacher类,也就是Student类和Teacher类继承了User类

  1. 数据库是这样设计的,给每个子类造了一个表,下面是Hibernate项目配置,只配User

    <class name="User"abstract="true">
    <id name="id" column="USER_ID" type="long">
    <generator class="native"></generator>
    </id>
    <property name="name" column="USER_NAME" type="string"></property>
    <union-subclass name="Teacher" table="TEACHER">
    <property name="job" column="TEACHER_JOB"/>
    </union-subclass>
    <union-subclass name="Student" table="STUDENT">
    <property name="class" column="STUDENT_CLASS"/>
    </union-subclass>
    </class>

    用法就是存储查询Teacher、Student都可以;如果查全的也行User,数据库发的是union语句

  2. 尼玛整个各种子类和他们的父类都在一张表,同时搞个字段区分是哪个类。配置文件这么写:

    <class name="User"table="USERS">
    <id name="id" column="USER_ID" type="long">
    <generator class="native"></generator>
    </id>
    <discrimnator column="DISCRIMNATOR" type="String"></discrimnator>
    <property name="name" column="USER_NAME" type="string"></property>
    <subclass name="Teacher" discrimnator-value="TEACHER">
    <property name="job" column="TEACHER_JOB"/>
    </subclass>
    <subclass name="Student" discrimnator-value="STUDENT">
    <property name="class" column="STUDENT_CLASS"/>
    </subclass>
    </class>

    父类如果不是抽象类,也可以在<class>表情内部搞个discrimnator-value="某某",这样父类子类任意搞

  3. 父类对应一张表,每子类再各自对应一张表,子类表的主键也是外键,就是说子类id=2,和父类里面有个id=2的组合用,多了个key配。配置文件这么写的:

    <class name="User"table="USERS">
    <id name="id" column="USER_ID" type="long">
    <generator class="native"></generator>
    </id>
    <property name="name" column="USER_NAME" type="string"></property>
    <joined-subclass name="Teacher" table="TEACHER">
    <key column="TEACHER_ID"/>
    <property name="job" column="TEACHER_JOB"/>
    </joined-subclass>
    <joined-subclass name="Student" table="STUDENT">
    <key column="STUDENT_ID"/>
    <property name="class" column="STUDENT_CLASS"/>
    </joined-subclass>
    </class>

     

  4. 虽然原则上上述方法是不能混用的,但实际上使用外连接也是可以结合使用的,但是个人认为不太好,除非万不得已,最好不要使用,参考《Hibernate in action》208页。

区别嘛,都标红了,数据库的区别,可以看看标红的类对应表没,至于用哪种,你觉得用起来哪种舒服就那种。有时候都不搞继承,当字段区分搞了。

分享到:
评论

相关推荐

    hibernate学习笔记

    综上所述,这份"hibernate学习笔记"全面覆盖了Hibernate的主要方面,包括对象生命周期管理、对象关系映射、查询方式以及性能优化。对于希望深入理解和掌握Hibernate的开发者来说,这是一个非常宝贵的资源。

    Hibernate学习笔记_songjignhao_1

    总的来说,这篇 Hibernate 学习笔记涵盖了关联关系的多种类型和映射方法,以及查询排序、组件映射和继承映射等核心概念,为理解并熟练运用 Hibernate 提供了坚实的基础。通过实际编码和理解这些示例,开发者可以更...

    Hibernate3 学习笔记.ppt

    通过元数据(如XML或注解),开发者可以定义对象类和数据库表之间的映射关系,包括基本类型的字段对应表的列,类的属性与表的外键,以及1:1、1:n、n:m的关联关系和继承结构。 【二、Hibernate入门】 Hibernate是一...

    hibernate 学习笔记4

    ### Hibernate 学习笔记4 —— 多对多关系与多态映射 #### 多对多关系 在 Hibernate 中处理多对多关系时,通常采用一种称为“连接表”或“关联表”的方法来实现两个实体之间的多对多关联。这种设计方式较为常见且...

    hibernate框架开发2016版视频 四天学习笔记完整版

    【hibernate框架开发2016版视频 四天学习笔记完整版】 在软件开发领域,特别是Java Web开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者可以更专注于业务逻辑而不是...

    hibernate 学习笔记总结

    在Hibernate中,对象之间的关联关系可以方便地通过映射文件或注解来定义。主要包括以下几种关联类型: - **一对一**:可以通过共享主键(`constrained="true"`)或使用外键(`property-ref`)的方式来实现。 - **一...

    Hibernate学习笔记(1-13)

    【Hibernate学习笔记(1-13)】是传智播客李勇的教程,涵盖了Hibernate框架的基础到进阶内容。Hibernate是一个流行的ORM(对象关系映射)框架,它旨在解决Java面向对象编程与关系型数据库之间的模型不匹配问题,即...

    Hibernate学习笔记

    Hibernate是一个开源的对象关系映射(O/R Mapping)框架,它主要用于将Java对象映射到关系数据库中,以简化数据库编程。Hibernate通过映射文件来实现对象和数据库表的映射关系,从而提供了一种简便的方式来操作...

    Hibernate Annotation 学习笔记

    《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...

    2023年Java相关课程系列笔记之十四Hibernate学习笔记.doc

    在本篇“2023年Java相关课程系列笔记之十四Hibernate学习笔记”中,我们将深入探讨Java开发中常用的持久化框架——Hibernate。这个框架由梁建全老师主讲,旨在帮助开发者更高效、便捷地进行数据库操作,弥补JDBC在...

    hibernate4框架学习笔记

    【hibernate4框架学习笔记】 Hibernate是一款强大的ORM(Object-Relational Mapping)框架,它在Java开发中扮演着至关重要的角色,通过提供对象与数据库之间的映射,解决了对象模型和关系模型之间的“阻抗不匹配”...

    Hibernate 4 学习笔记

    这个学习笔记将深入探讨Hibernate 4的核心特性、配置、实体映射以及如何使用它来提升开发效率。 **一、Hibernate 4 的核心概念** 1. **对象关系映射 (ORM):** ORM是Hibernate的核心,它通过映射Java类到数据库表,...

Global site tag (gtag.js) - Google Analytics