`
piaolingluo
  • 浏览: 5787 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类

Hibernate继承映射

阅读更多
用户(父类):
public class User implements Serializable {
private Integer id;
private String username;
private String password;
public User() {
super();
}
...此处省略get/set方法...
}

普通用户(子类):
public class Member extends User {
private String name;
private String phone;
public Member() {
super();
}
...此处省略get/set方法...
}

管理员(子类):
public class Manager extends User {
public Manager() {
super();
}
}

映射文件的配置
方式一(只建一张表):
<hibernate-mapping package="day03.pm">
<class name="User" table="t_user1">
<id name="id">
<generator class="native"></generator>
</id>

<discriminator column="status"></discriminator>

<property name="username"></property>
<property name="password"></property>

<subclass name="Member" discriminator-value="me">
<property name="name"></property>
<property name="phone"></property>
</subclass>

<subclass name="Manager" discriminator-value="ma">
</subclass>
</class>
</hibernate-mapping>

mysql> desc t_user1;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| status   | varchar(255) | NO   |     | NULL    |                |
| username | varchar(255) | YES  |     | NULL    |                |
| password | varchar(255) | YES  |     | NULL    |                |
| name     | varchar(255) | YES  |     | NULL    |                |
| phone    | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

方式二(每个子类各建一张表):
Member.hbm.xml
<hibernate-mapping package="day03.pm">
<import class="User"/>
<class name="Member" table="t_member1">
<id name="id">
<generator class="native"></generator>
</id>
<property name="username"></property>
<property name="password"></property>
<property name="name"></property>
<property name="phone"></property>
</class>
</hibernate-mapping>

Manager.hbm.xml
<hibernate-mapping package="day03.pm">
<import class="User"/>
<class name="Manager" table="t_manager1">
<id name="id">
<generator class="native"></generator>
</id>
<property name="username"></property>
<property name="password"></property>
</class>
</hibernate-mapping>
mysql> desc t_member1;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(255) | YES  |     | NULL    |                |
| password | varchar(255) | YES  |     | NULL    |                |
| name     | varchar(255) | YES  |     | NULL    |                |
| phone    | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

mysql> desc t_manager1;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(255) | YES  |     | NULL    |                |
| password | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+


方式三(每个类都建表):
User2.hbm.xml
<hibernate-mapping package="day03.pm">
<class name="User" table="t_user2">
<id name="id">
<generator class="native"></generator>
</id>
<property name="username"></property>
<property name="password"></property>

<joined-subclass name="Member" table="t_member2">
<key column="user_id"></key>
<property name="name"></property>
<property name="phone"></property>
</joined-subclass>

<joined-subclass name="Manager" table="t_manager2">
<key column="user_id"></key>
</joined-subclass>

</class>
</hibernate-mapping>

mysql> desc t_user2;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(255) | YES  |     | NULL    |                |
| password | varchar(255) | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+


mysql> desc t_member2;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| user_id | int(11)      | NO   | PRI | NULL    |       |
| name    | varchar(255) | YES  |     | NULL    |       |
| phone   | varchar(255) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+

mysql> desc t_manager2;
+---------+---------+------+-----+---------+-------+
| Field   | Type    | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+-------+
| user_id | int(11) | NO   | PRI | NULL    |       |
+---------+---------+------+-----+---------+-------+

分享到:
评论

相关推荐

    Hibernate继承映射代码

    本主题将深入探讨"Hibernate继承映射+C3P0代码"的相关知识点。 首先,让我们理解Hibernate的继承映射。在Java中,我们可以创建一个基类,然后派生出多个子类,这种设计模式在数据库中也可以被映射出来。Hibernate...

    Hibernate继承映射的第一种策略:每棵类继承树对应一张表

    Hibernate继承映射是将Java类的继承关系映射到数据库表的一种策略,使得对象模型的复杂性能够平滑地转化为关系数据库模型。本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承...

    hibernate继承映射.rar

    《Hibernate继承映射详解》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。在实际项目中,我们常常会遇到类的继承关系,而Hibernate提供了强大的支持来处理这种继承关系的...

    Hibernate继承映射(annotation)

    **标题:“Hibernate继承映射(Annotation)详解”** 在Java持久化框架Hibernate中,继承映射是一种关键特性,它允许开发者将对象模型的继承结构映射到数据库的表结构。在传统的面向对象编程中,继承是实现代码复用和...

    Hibernate继承映射-概述

    《Hibernate继承映射详解》 在Java开发中,对象关系映射(ORM)框架如Hibernate大大简化了数据库操作。Hibernate不仅提供了对基本数据类型的映射,还支持复杂的数据结构,如继承关系的映射。本篇文章将深入探讨...

    Hibernate继承映射的第一种策略:每个具体类一张表

    本篇文章将详细探讨Hibernate继承映射的策略,特别是“每个具体类一张表”(Table Per Concrete Class)的映射方式。 在面向对象编程中,继承是常见的代码复用手段,但在关系型数据库中,这种概念并不直接对应。...

    Hibernate继承映射的第一种策略:每个类对应一张表

    本文将详细探讨“Hibernate继承映射的第一种策略:每个类对应一张表”的概念、实现方式以及其优缺点。 首先,我们需要理解Hibernate继承映射的基本策略。在面向对象编程中,类继承是常见的代码复用手段,但在数据库...

    hibernate继承映射教学

    针对hibernate的继承映射部分做了几个测试的例子,更加直观的阐述了继承映射的几种方式以及对应的表结构方式,文件被分割成3部分 http://download.csdn.net/source/259075 http://download.csdn.net/source/259072 ...

    Hibernate继承映射二:每个子类一张表

    本篇主要探讨的是Hibernate中的继承映射策略,特别是“每个子类一张表”(Table per subclass)的方式。这种方式也被称为单表继承或多表继承,是Hibernate支持的四种继承映射策略之一。了解并熟练掌握这种映射模式...

    用Hibernate映射继承关系

    ### 用Hibernate映射继承关系 #### 14.1 继承关系树的每个具体类对应一个表 在Hibernate中映射继承关系时,一种常见的策略是将继承关系树的每个具体类映射到单独的数据库表中。这种方法称为**表/类映射**(Table/...

    Hibernate继承映射一:每个类分层结构一张表

    本篇文章主要探讨的是Hibernate的继承映射策略,特别是“每个类分层结构一张表”(Table per Concrete Class)的方式。这种映射策略是Hibernate提供的多种继承映射方案之一,适用于处理复杂的对象模型。 首先,我们...

    Hibernate教程17_继承映射

    在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本教程主要探讨的是Hibernate中的“继承映射...学习并实践这些例子,有助于巩固对Hibernate继承映射的理解,并提升在实际项目中的应用能力。

Global site tag (gtag.js) - Google Analytics