场景有个User类,然后扩展出了Student类和Teacher类,也就是Student类和Teacher类继承了User类
-
数据库是这样设计的,给每个子类造了一个表,下面是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语句
-
尼玛整个各种子类和他们的父类都在一张表,同时搞个字段区分是哪个类。配置文件这么写:
<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="某某",这样父类子类任意搞
-
父类对应一张表,每子类再各自对应一张表,子类表的主键也是外键,就是说子类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>
- 虽然原则上上述方法是不能混用的,但实际上使用外连接也是可以结合使用的,但是个人认为不太好,除非万不得已,最好不要使用,参考《Hibernate in action》208页。
区别嘛,都标红了,数据库的区别,可以看看标红的类对应表没,至于用哪种,你觉得用起来哪种舒服就那种。有时候都不搞继承,当字段区分搞了。
分享到:
相关推荐
综上所述,这份"hibernate学习笔记"全面覆盖了Hibernate的主要方面,包括对象生命周期管理、对象关系映射、查询方式以及性能优化。对于希望深入理解和掌握Hibernate的开发者来说,这是一个非常宝贵的资源。
总的来说,这篇 Hibernate 学习笔记涵盖了关联关系的多种类型和映射方法,以及查询排序、组件映射和继承映射等核心概念,为理解并熟练运用 Hibernate 提供了坚实的基础。通过实际编码和理解这些示例,开发者可以更...
通过元数据(如XML或注解),开发者可以定义对象类和数据库表之间的映射关系,包括基本类型的字段对应表的列,类的属性与表的外键,以及1:1、1:n、n:m的关联关系和继承结构。 【二、Hibernate入门】 Hibernate是一...
### Hibernate 学习笔记4 —— 多对多关系与多态映射 #### 多对多关系 在 Hibernate 中处理多对多关系时,通常采用一种称为“连接表”或“关联表”的方法来实现两个实体之间的多对多关联。这种设计方式较为常见且...
【hibernate框架开发2016版视频 四天学习笔记完整版】 在软件开发领域,特别是Java Web开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者可以更专注于业务逻辑而不是...
在Hibernate中,对象之间的关联关系可以方便地通过映射文件或注解来定义。主要包括以下几种关联类型: - **一对一**:可以通过共享主键(`constrained="true"`)或使用外键(`property-ref`)的方式来实现。 - **一...
【Hibernate学习笔记(1-13)】是传智播客李勇的教程,涵盖了Hibernate框架的基础到进阶内容。Hibernate是一个流行的ORM(对象关系映射)框架,它旨在解决Java面向对象编程与关系型数据库之间的模型不匹配问题,即...
Hibernate是一个开源的对象关系映射(O/R Mapping)框架,它主要用于将Java对象映射到关系数据库中,以简化数据库编程。Hibernate通过映射文件来实现对象和数据库表的映射关系,从而提供了一种简便的方式来操作...
《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...
在本篇“2023年Java相关课程系列笔记之十四Hibernate学习笔记”中,我们将深入探讨Java开发中常用的持久化框架——Hibernate。这个框架由梁建全老师主讲,旨在帮助开发者更高效、便捷地进行数据库操作,弥补JDBC在...
【hibernate4框架学习笔记】 Hibernate是一款强大的ORM(Object-Relational Mapping)框架,它在Java开发中扮演着至关重要的角色,通过提供对象与数据库之间的映射,解决了对象模型和关系模型之间的“阻抗不匹配”...
这个学习笔记将深入探讨Hibernate 4的核心特性、配置、实体映射以及如何使用它来提升开发效率。 **一、Hibernate 4 的核心概念** 1. **对象关系映射 (ORM):** ORM是Hibernate的核心,它通过映射Java类到数据库表,...