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. linux之inode

    一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会 ...

  2. Raw-OS源代码分析之同优先级任务切换

    分析的内核版本号截止到2014-04-15,基于1.05正式版,blogs会及时跟进最新版本号的内核开发进度,若源代码凝视出现"???"字样,则是未深究理解部分. Raw-OS官方 ...

  3. linux中grep命令的使用

    转载:http://blog.csdn.net/universsky/article/details/8866402 linux中grep命令的使用 grep (global search regul ...

  4. zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。

    zookeeper集群,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的.

  5. 记一次压力测试和对nginx/tomcat配置的调整

    原文地址:还没找到 是一个web系统,前端使用nginx做为反向代理,处理https,并将请求转发给后端的tomcat服务. 压力测试工具选择了jmeter. 首先简单介绍一下jmeter. 它是ap ...

  6. Javascript:拦截所有AJAX调用,重点处理服务器异常

    背景 上篇文章http://www.cnblogs.com/happyframework/p/3241063.html介绍了如何以AOP的形式处理服务器异常,这让服务器端的编程逻辑变的非常整洁,本文介 ...

  7. cocos2dx 3.0研究(1)-- hello world程序

    1. 在mac上构建hello world很easy ./setup.py source /Users/jiangxf/.bash_profile cocos new AliGame -p com.m ...

  8. 如何更改postgresql的最大连接数

    改文件 postgresql.conf 里的 #max_connections=32 为 max_connections=1024 以及另外相应修改 share_buffer 参数.

  9. invalidate和requestLayout方法源码分析

    invalidate方法源码分析 在之前分析View的绘制流程中,最后都有调用一个叫invalidate的方法,这个方法是啥玩意?我们来看一下View类中invalidate系列方法的源码(ViewG ...

  10. 如何模拟登陆添加了CSRF保护的网站

    上次写了篇文章,内容是如何利用WebClient模拟登陆CSRF控制的网站,回复中有人还是不理解,现在另开一篇,打算说说用Python如何来登陆. 开写之前,先说下为什么webrequest不行,常规 ...