1 简单继承映射,在子类上进行映射配置,可以将父类属性直接配置在子类映射文件中。

简单例子如下:teacher类继承自Person类。

public class Person {
private int id;
private String pname; public Person() {
// TODO Auto-generated constructor stub
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
} }

Teacher

public class Teacher extends Person {
private String tschoolName; public Teacher() {
// TODO Auto-generated constructor stub
} public String getTschoolName() {
return tschoolName;
} public void setTschoolName(String tschoolName) {
this.tschoolName = tschoolName;
}
}

Teacher.hbm.xml配置文件

<hibernate-mapping
package="com.baidu.entity3"> <class name="Teacher" table="teacher">
<id name="id" column="id">
<generator class="native"></generator>
</id> <property name="pname" column="name"></property>
<property name="tschoolName" column="schoolName"></property> </class>
</hibernate-mapping>

简单测试

public void fun1(){
Teacher teacher = new Teacher();
teacher.setPname("good");
teacher.setTschoolName("南洋理工"); Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFac = configuration.buildSessionFactory();
Session session = sessionFac.openSession();
Transaction bt = session.beginTransaction(); session.save(teacher);
bt.commit(); session.close();
sessionFac.close(); }

2 所有类使用一张表,使用subclass属性。注意需要使用类鉴别器,这种设计方法不太符合数据库表的设计原则,会用很多空的字段产生。

继续上面的例子,新产生一个类,Engineer

public class Engineer extends Person {

    private String ecompName;

    public Engineer() {
// TODO Auto-generated constructor stub
} public String getEcompName() {
return ecompName;
} public void setEcompName(String ecompName) {
this.ecompName = ecompName;
}
}

此时配置文件只在父类Person.hbm.xml映射文件中做

<hibernate-mapping
package="com.baidu.entity3"> <class name="Person" table="person">
<id name="id" column="id">
<generator class="native"/>
</id>
<discriminator column="type"></discriminator>
<property name="pname" column="name"></property> <subclass name="Teacher" discriminator-value="teacher_">
<property name="tschoolName" column="schoolName"></property>
</subclass> <subclass name="Engineer" discriminator-value="engineer_">
<property name="ecompName" column="eompanyName"></property>
</subclass> </class> </hibernate-mapping>

注意需要使用鉴别器,discriminator位置在id属性下面,property上面。每个子类使用subclass标签区分,需要指定discriminator-value属性,表明该类属于那个类别。

3 每个类使用一张表,属性关键字joined-subclass,也是在父类的配置文件上Person.hbm.xml配置

<hibernate-mapping
package="com.baidu.entity3"> <class name="Person" table="person">
<id name="id" column="id">
<generator class="native"/>
</id>
<discriminator column="type"></discriminator>
<property name="pname" column="name"></property> <joined-subclass name="Engineer" table="engineer">
<key column="id"></key>
<property name="ecompName" column="companyName"></property>
</joined-subclass>   <joined-subclass name="Teacher" table="teacher">
<key column="id"></key>
<property name="tschoolName" column="schoolName"></property>
</joined-subclass>
</class> </hibernate-mapping>

注意:因为每个子类都要生成一张表,因此在使用joined-subclass的时候需要指定table属性来指定使用那张表。

4 所有子类使用一张表,属性关键字union-subclass。注意这种方式主键的生成方式不可以使用自增长,可以使用uuid。配置文件还是在Person.hbm.xml配置

<hibernate-mapping
package="com.baidu.entity3"> <class name="Person" table="person">
<id name="id" column="id">
<generator class="uuid"/>
</id>
<discriminator column="type"></discriminator>
<property name="pname" column="name"></property> <union-subclass name="Engineer" table="engineer">
<property name="ecompName" column="companyName"></property>
</union-subclass> <union-subclass name="Teacher" table="teacher">
<property name="tschoolName" column="schoolName"></property>
</union-subclass>
</class> </hibernate-mapping>

hibernate中继承映射保存的更多相关文章

  1. hibernate中一对一映射

    一.hibernate中一对一映射有两种 1 主键方式,一张表的主键是通过另一张表的主键生成的 2 外键方式,一张表添加外键引用另一张表的主键,并添加唯一unique约束 二.下面进行简单例子,用户和 ...

  2. Hibernate中的映射关系(一对多)

    在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...

  3. hibernate中的映射

    hibernate中的映射是指Java类和数据库表中的属性来进行关联,然后通过类来操作数据库中,这就是简单的映射.

  4. hibernate笔记--继承映射关系的三种实现方式

    单表继承映射(一张表): 假设我们现在有三个类,关系如下: Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映 ...

  5. Hibernate之继承映射

    1. Hibernate支持三种继承映射策略: –使用 subclass进行映射:将域模型中的每一个实体对象映射到一个独立的表中,也就是说不用在关系数据模型中考虑域模型中的继承关系和多态. –使用 j ...

  6. 初识Hibernate之继承映射

         前面的两篇文章中,我们介绍了两张表之间的各种相互关联映射关系,但往往我们也会遇到两张表甚至多张表之间共有着多个相同的字段.例如: 如图,student表和teacher表共同具有id,nam ...

  7. Hibernate的继承映射

    对象模型示例: 继承映射的实现方式有以下三种: (一)每棵类继承树一张表 (二)每个类一张表 (三)每个子类一张表 (一)每棵类继承树一张表 关系模型如下: 映射文件如下: <hibernate ...

  8. hibernate中关系映射的配置问题

    部门和员工属于一对多的关系 员工的账户属于一对一关系 账户和权限属于多对多关系 department.hbm.xml 1 <hibernate-mapping> 2 <class n ...

  9. 【转】hibernate中的映射文件xxx.hbm.xml详解总结

    一.Hibernate映射文件的作用: Hibernate映射文件是Hibernate与数据库进行持久化的桥梁 二,Hibernate映射文件主要内容:     (1).映射内容的定义: Hibern ...

随机推荐

  1. C语言跟内存分配方式-alloc malloc calloc

    转载:http://blog.csdn.net/ubuntulover/article/details/7581317 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整 ...

  2. The maximum number of processes for the user account running is currently , which can cause performance issues. We recommend increasing this to at least 4096.

    [root@localhost ~]# vi /etc/security/limits.conf # /etc/security/limits.conf # #Each line describes ...

  3. git和SVN的差别

    1)GIT是分布式的.SVN不是: 这 是GIT和其它非分布式的版本号控制系统,比如SVN.CVS等.最核心的差别.优点是跟其它同事不会有太多的冲突.自己写的代码放在自己电脑上,一段时间后再提交.合并 ...

  4. Go:Hello World!

    备注 结束了一周紧张的工作,周末像品茶一样玩味一下Go,本文主要记录学习Go的经历. Go是什么? 官方网站:http://golang.org/. 在Windows下安装Go 官方教程:http:/ ...

  5. ExtJS遮罩层Ext.loadMask

    一.可以直接应用在元素上,如: var loadMarsk = new Ext.LoadMask(target, { msg:'正在处理数据,请稍候......', removeMask:true / ...

  6. linux远程连接

    1.使用putty连接 putty下载地址 http://www.putty.org/ 2.通过VNC连接 vnc_viewer 下载地址 http://www.realvnc.com/downloa ...

  7. Spring Bean 注入 1 - 构造方法注入,属性注入,自动装配

    1.代码结构图 xxx 2.bean代码 package com.xxx.bean; /** * Created with IntelliJ IDEA. * User: zhenwei.liu * D ...

  8. 测试markdown 博客功能

    欢迎使用 Cmd - 在线 Markdown 编辑阅读器 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 -- 我们 ...

  9. 几款很厉害的jQuery数字化签名插件(转)

    在浏览器中,我们有很多方式来绘制生成签名效果,并且有很多很棒很智能的jQuery插件.数字化签名是未来的发展方向,正是这个原因我们这里收集并且推荐了四款超棒的jQuery数字化签名插件,希望大家喜欢! ...

  10. C#-MessageBox全部函数重载形式及举例

    Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...