`
namezhou
  • 浏览: 158632 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate 3种方式实现 继承映射

阅读更多

继承映射:即保存父子类时数据冗余问题

 

1.所有父子类共享同一张表,每条记录拥有所有属性字段,另外还需要指定一个标识字段用来区别不同子类

       优点:易于查询缺点:冗余字段太多

 

实现:

实体类(父类User,子类Vip,子类Admin)均省略无参构造函数和setter/getter

public class User {

      private int userid;

      private String username;

      private String password;

}

public class Admin extends User {

      private int level;

}

public class Vip extends User {

      private int balance;

}

  

使用一个映射文件User.hbm.xml

<hibernate-mapping package="entity">   <!--别忘为父类指定标识符,默认全类名-->

 <class name="User" table="sub_user" discriminator-value="user">

       <id name="userid">

             <generator class="native"></generator>

       </id>

            <!--子类类型标识符,必须写在id下面-->

       <discriminator type="string" column="user_type"></discriminator>

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

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

       <subclass discriminator-value="vip" name="Vip">

             <property name="balance"></property>

       </subclass>

       <subclass discriminator-value="admin" name="Admin">

             <property name="level"></property>

       </subclass>  <!--子类-->

 </class>

</hibernate-mapping>

  

 

方法二:

所有用户信息保存在user表中,各子类拥有的个性字段使用单独的表来保存 ,所有用户都在父类表中拥有一条记录

配置文件user.hbm.xml

<hibernate-mapping package="entity">

 <class name="User" table="sub_user">

       <id name="userid">

             <generator class="native"></generator>

       </id>

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

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

            <!--指定子类的表名-->

       <joined-subclass table="vip_user" name="Vip">

                        <!--key指定的列名为此子类到父类的外键引用-->

             <key column="userid"></key>

             <property name="balance"></property>

       </joined-subclass>

       <joined-subclass table="admin_user" name="Admin">

             <key column="userid"></key>

             <property name="level"></property>

       </joined-subclass>

 </class>

</hibernate-mapping>

 方法三:各子类和父类都使用不同的表,有x个子类,就创建x+1个映射文件,麻烦,这个不写了

 

测试代码:

 

 public static void main(String[] args) {

            User tom = new User();

            Vip jack = new Vip();

            Admin lee = new Admin();

            

            tom.setPassword("tompass");

            jack.setPassword("jackpass");

            lee.setPassword("leepass");

            

            tom.setUsername("tom");

            jack.setUsername("jack");

            lee.setUsername("lee");

            

            jack.setBalance(100); //vip

            lee.setLevel(20); //admin

            

            Session ss = null;

            Transaction ts = null;

            try{

                  ss = DBFactory.sf.openSession();

                  ts = ss.beginTransaction();

                  ss.save(tom);

                  ss.save(jack);

                  ss.save(lee);

                  ts.commit();

                  ss.close();

            }catch(Exception e){

                  ts.rollback();

                  e.printStackTrace();

            }

      }

 

 

0
0
分享到:
评论

相关推荐

    Hibernate继承映射代码

    在"javaII-8"这个压缩包文件中,很可能包含了实现Hibernate继承映射和C3P0连接池配置的源代码示例。这些代码可能包括实体类定义、映射文件(如.hbm.xml或使用注解的类)、Hibernate配置文件(hibernate.cfg.xml)...

    Hibernate教程17_继承映射

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

    用Hibernate映射继承关系

    在Hibernate中映射继承关系时,一种常见的策略是将继承关系树的每个具体类映射到单独的数据库表中。这种方法称为**表/类映射**(Table/Class Mapping),是最直观且简单的映射方式。它不考虑抽象类或继承关系,而是...

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

    总之,单一表继承策略是一种简单且直观的Hibernate继承映射方式,适合类继承层次结构不深且子类数量较少的情况。但在大型项目或复杂的类继承结构中,可能需要考虑其他策略,如`JOINED`或`TABLE_PER_CLASS`。理解并...

    Hibernate教程17_继承映射_补充2

    JOINED策略是Hibernate实现继承映射的一种方式,它将每个继承层次的类映射到单独的表中。 1. **继承映射的基础**: - Hibernate提供了四种继承映射策略:`SINGLE_TABLE`、`JOINED`、`TABLE_PER_CLASS` 和 `MAPPED_...

    hibernate继承映射.rar

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

    Hibernate教程17_继承映射_补充1

    在本教程中,我们将深入探讨Hibernate中的继承映射策略,特别是"Table Per Class"策略,这是Java对象模型到关系数据库映射的一种方法。在Hibernate框架中,继承是通过ORM(对象关系映射)来实现的,它允许我们将复杂...

    Hibernate继承映射-概述

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

    继承映射的

    通过继承映射,可以在基类中定义通用属性,同时在子类中添加特定属性,实现代码的复用和简化。 此外,利用Java语言的`instanceof`关键字,可以在运行时检查一个对象是否属于某个特定的子类。这在处理继承映射的数据...

    hibernate继承映射教学

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

    Hibernate继承映射(annotation)

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

    Hibernate继承关系映射.pdf

    本文档主要聚焦于Hibernate框架下继承关系的映射,通过三种不同的策略——隐式继承映射、单表映射和关联表映射,来实现类的继承结构在数据库中的映射。 ### 隐式继承映射 #### 定义与配置 隐式继承映射也称为“表...

    Hibernate继承映射

    Hibernate的继承映射 --每个继承层次一张表 -- 每个具体类一张表 -- 每个类一张表

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

    这种方式也被称为单表继承或多表继承,是Hibernate支持的四种继承映射策略之一。了解并熟练掌握这种映射模式对于提升Java开发效率和代码维护性至关重要。 在传统的面向对象编程中,类可以有继承关系,但在关系...

    hibernate 映射继承 demo

    现在,我们开始创建一个简单的Hibernate继承映射示例。假设我们有一个基类`Person`,两个子类`Student`和`Teacher`。在Java代码中,我们需要定义这些类并添加相应的注解: ```java @Entity @Inheritance(strategy =...

    Hibernate数据关联映射与继承策略

    **Hibernate继承策略** 在 Hibernate 中,为了处理对象模型中的继承关系,提供了以下几种继承策略: 1. **单表继承(Single Table Inheritance)**:所有子类共享同一张数据库表,使用一个标识字段来区分不同的...

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

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

    hibernate的继承映射教学

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

Global site tag (gtag.js) - Google Analytics