继承这个词多半用在OOP编程里,比如类的继承,但是在Hibernate里表也有继承关系,这也难怪,因为Hibernate的目的就是要把数据库对象化。
先来看一个简单的例子,一个人员表Person,这张表里主要纪录一些公司人员的基本信息;还有一张用户表User,这张表纪录的是公司里的人员登陆公司网站的用户名信息表;很显然用户来源于人员,一个人员可以有多个用户,而一个用户只对应一个人员,这样User这张表就可以继承Person这张表了,因为它完全符合继承关系的条件,即User是在Person的基础上扩展而来的。
下面我们看看上例Hibernate里的HBM XML文件和POJO类是怎么写的,先看HBM XML文件的写法:
<class name="org.user.dao.hibernate.Person" table="person">
<id name="id" column="id"><generator class="increment" /></id>
<property name="firstName" column="firstname" length="30"/>
<property name="lastName" column="lastname" length="30"/>
<joined-subclass name="org.user.dao.hibernate.User" table="user">
<key column="person_id"/>
<property name="id" column="id"/>
<property name="userName" column="user_name"/>
</joined-subclass>
</class>
这个XML文件体现了Person和User的继承关系,如果你还是不太清楚地话,看下面的POJO类,那可是百分之百的继承关系了:
package org.user.dao.hibernate;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 6254796603241870646L;
private long id;
private String firstName;
private String lastName;
public Person() {
}
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
User类的写法:
package org.user.dao.hibernate;
public class User extends Person {
private static final long serialVersionUID = 2848034506633654174L;
private String userName;
public User() {
}
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
至此Hibernate里数据库表的继承关系就完全展示出来了。Hibernate里使用映射文件(HBM XML文件)和POJO类来完全封装数据库,使数据库完全对象化,而我们在写程序操作数据库时也完全像操作一个对象一样,这样数据库表的继承关系也表现的非常自然了。
分享到:
相关推荐
这种策略可以避免单表继承中的空字段问题,但可能会导致更多的JOIN操作,影响性能。 3. Concrete Table Inheritance(具体类继承): 每个类(包括基类和子类)都有自己的数据库表。每个表只包含该类特有的属性,...
Hibernate,作为Java中广泛使用的对象关系映射(ORM)框架,提供了多种方式来处理继承关系的映射,其中一种就是"每个类都对应一张表"的策略。本文将深入探讨这种映射方式,以及如何在Hibernate中实现它。 首先,...
本主题聚焦于“用Hibernate映射继承关系”,我们将深入探讨Hibernate如何处理对象的继承层次结构,并将其映射到数据库中的表。 Hibernate支持多种继承策略,包括单一表继承(Single Table Inheritance)、联合表...
通过将Java对象模型映射到关系型数据库表上,Hibernate为数据持久化提供了强大的支持,同时保持了代码的简洁性和可维护性。 #### 二、权限与配置 在部署Hibernate之前,必须确保具备适当的权限,并进行正确的配置...
1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为Java类,表中的记录映射为类的实例,列映射为类的属性。这样,开发者可以避免直接编写SQL语句,而是通过Java对象进行数据操作。 2. **配置文件**:Hibernate...
在 Hibernate 中配置多数据库,并自由切换,可以使用 Spring 框架来实现。下面是一个简单的配置示例: 首先,创建一个父数据源(parentDataSource),用于配置多个数据源共有的信息: ```xml ...
在Hibernate中,数据库表对应于Java类(Entity),表中的行对应于类的实例。使用注解或XML文件进行映射,定义类属性与数据库字段的对应关系,如主键、外键、索引等。 ### 7. Cascade 和 Lazy Loading `Cascade` ...
总的来说,“union-subclass”是Hibernate提供的一种处理继承关系的方法,它允许我们有效地将复杂的面向对象设计映射到数据库中,同时也为我们的查询提供了灵活性。在实际开发中,熟练掌握和运用这种策略,可以提高...
在联合表继承中,每个子类都有自己的独立表,同时还有一个公共的父类表。使用`@Inheritance(strategy = InheritanceType.JOINED)`来声明此策略。子类属性被存储在其各自的表中,而共享的属性则在父类表中。子类与...
在IT行业中,Hibernate是一个非常重要的Java持久化框架,它简化了与关系型数据库之间的交互,使得开发者能够以对象-关系映射(ORM)的方式处理数据。在这个“Hibernate连接数据库模拟”项目中,我们将会深入探讨如何...
这种方式下,Hibernate不会在数据库中体现继承关系,而是为每个类创建一个独立的表。这种方式适用于子类有很多特定的属性,而父类属性较少的情况。配置示例中,创建了一个名为Hibernate08的工程,配置了hibernate....
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作。在大型项目中,由于业务需求复杂,我们常常会使用到类的继承来组织代码结构,而Hibernate提供了对...
Hibernate继承映射是将Java类的继承关系映射到数据库表的一种策略,使得对象模型的复杂性能够平滑地转化为关系数据库模型。本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承...
本文档主要聚焦于Hibernate框架下继承关系的映射,通过三种不同的策略——隐式继承映射、单表映射和关联表映射,来实现类的继承结构在数据库中的映射。 ### 隐式继承映射 #### 定义与配置 隐式继承映射也称为“表...
在ORM(Object-Relational Mapping)框架如Hibernate中,如何优雅地将这些继承关系映射到关系型数据库中,成为了一个重要的议题。本文将深入探讨Hibernate如何处理继承多态映射关系,主要通过三种不同的策略来实现这一...
在Java持久化框架Hibernate中,对象关系模型(Object-Relational Mapping,ORM)是将数据库中的数据映射到Java对象的技术。它使得开发者能够用面向对象的方式来操作数据库,简化了数据库编程的过程。以下是对...
在 Hibernate 中,数据关联映射是实现对象与数据库表之间关系转换的关键技术。 1. **一对一关联(One-to-One)**:一个实体对应数据库中的另一张表中的唯一一条记录。这可以通过在主键上添加外键约束或使用单独的...
总结来说,“每个子类一张表”的继承映射策略是Hibernate提供的一种处理继承关系的方法,它将类的继承结构映射到数据库的多个表中。这种策略适合于子类具有大量特有属性的情况,但需要权衡可能带来的数据库设计复杂...