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 内核函数调用关系

    源码分析:动态分析 Linux 内核函数调用关系 时间 2015-04-22 23:56:07  泰晓科技 原文  http://www.tinylab.org/source-code-analysi ...

  2. 程序猿怎样变身IT讲师

    我以前写过一篇文章,"一张图道尽程序猿的出路",里面有一张图: 这张图随着"一张图道尽程序猿的出路"这篇文章,以前被伯乐在线.docin(豆丁网).IT面试.J ...

  3. hdu 1272 小希的迷宫(java实现)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  4. 在Visual Studio项目中根据系统平台自动引用32或64位的DLL

    最近在使用Noesis.Javascript.dll,但是这个DLL是有X86与X64二种版本的,我自己的电脑是64位的,但是别人的电脑是32位的.所以在别人那里使用的时候出了问题. 在VS里怎么引用 ...

  5. ArcGIS for Android 点击选择

    public void onSingleTap(float arg0, float arg1) { //selFeatureLayer.selectFeature(5); Point p = mMap ...

  6. asp.net Core 中间件Hello world

    虽然在ASP.NET 5中,微软没有再强调OWIN(Open Web Interface for .NET)及其微软官方的OWIN实现Katana,但是其中涉及到一些原则和设计思想依然被ASP.NET ...

  7. 返回content-length=0问题解决

    遇到一个奇怪问题,有时候会不显示css或图片文件,通过调试工具发现请求返回长度都是0.研究半天未果,初步猜测可能是过滤器给拦截了. 果然在一个过滤器中发现相关代码: HttpRequestWrappe ...

  8. android用jsonReader来解析json

    对于这个json: { "id" : "3232", "data" : [{ "data1" : "555&q ...

  9. iOS:判断引导页首次出现、版本更新

    判断引导页首次出现方式: //选择根控制器 +(void)chooseRootViewController{ //初始化Window窗口 [AppDelegate Delegate].window = ...

  10. .aspx(或.asp)文件与.html(.htm)文件的区别与联系

    由于都是用于描述网页文档的文件,自学asp.net起就对两者之间的关系很好奇 主要的区别在于,当用户请求页面时,它们在服务器的端的处理不同 下图解释客户端请求页面时,服务器端的处理流程: .html文 ...