hibernate中继承映射保存
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中继承映射保存的更多相关文章
- hibernate中一对一映射
一.hibernate中一对一映射有两种 1 主键方式,一张表的主键是通过另一张表的主键生成的 2 外键方式,一张表添加外键引用另一张表的主键,并添加唯一unique约束 二.下面进行简单例子,用户和 ...
- Hibernate中的映射关系(一对多)
在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...
- hibernate中的映射
hibernate中的映射是指Java类和数据库表中的属性来进行关联,然后通过类来操作数据库中,这就是简单的映射.
- hibernate笔记--继承映射关系的三种实现方式
单表继承映射(一张表): 假设我们现在有三个类,关系如下: Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映 ...
- Hibernate之继承映射
1. Hibernate支持三种继承映射策略: –使用 subclass进行映射:将域模型中的每一个实体对象映射到一个独立的表中,也就是说不用在关系数据模型中考虑域模型中的继承关系和多态. –使用 j ...
- 初识Hibernate之继承映射
前面的两篇文章中,我们介绍了两张表之间的各种相互关联映射关系,但往往我们也会遇到两张表甚至多张表之间共有着多个相同的字段.例如: 如图,student表和teacher表共同具有id,nam ...
- Hibernate的继承映射
对象模型示例: 继承映射的实现方式有以下三种: (一)每棵类继承树一张表 (二)每个类一张表 (三)每个子类一张表 (一)每棵类继承树一张表 关系模型如下: 映射文件如下: <hibernate ...
- hibernate中关系映射的配置问题
部门和员工属于一对多的关系 员工的账户属于一对一关系 账户和权限属于多对多关系 department.hbm.xml 1 <hibernate-mapping> 2 <class n ...
- 【转】hibernate中的映射文件xxx.hbm.xml详解总结
一.Hibernate映射文件的作用: Hibernate映射文件是Hibernate与数据库进行持久化的桥梁 二,Hibernate映射文件主要内容: (1).映射内容的定义: Hibern ...
随机推荐
- mount 和 umount 命令
参考:http://man.chinaunix.net/linux/mandrake/101/zh_cn/Command-Line.html/fs-and-mntpoints-mount.html 现 ...
- 打造android万能上拉下拉刷新框架——XRefreshView (二)
打造Android万能上拉下拉刷新框架--XRefreshView(一) 打造Android万能上拉下拉刷新框架--XRefreshView(三) 一.前言 自从上次发表了打造android万能上拉下 ...
- 5)Linux程序设计入门--信号处理
)Linux程序设计入门--信号处理 Linux下的信号事件 前言:这一章我们讨论一下Linux下的信号处理函数. Linux下的信号处理函数: 信号的产生 信号的处理 其它信号函数 一个实例 .信号 ...
- iOS:网络编程中三个数据解析协议HTTP、XML、JSON的详细介绍
网络编程:HTTP协议.XML数据协议.JSON数据协议: HTTP: 1.HTTP传输数据有四种方式:Get方式.Post方式.同步请求方式.异步请求方式. 说明:同步和异步请求方式在创建链接对象和 ...
- 给文件夹添加Everyone用户
DOC命令 C# code 1. cacls C:dming /g everyone:f /e /t 这样可以添加 2. cacls C:Program Files客友软件 /g everyone:f ...
- OkHttp 使用案例 文档翻译 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Virtualbox中Linux添加新磁盘并创建分区
原文:https://www.linuxidc.com/Linux/2017-01/139616.htm ----------------------------------------------- ...
- java线程同步问题——由腾讯笔试题引发的风波
刚刚wm问我了一道线程的问题,因为自己一直是coder界里的渣渣.所以就须要恶补一下. 2016年4月2号题目例如以下. import java.util.logging.Handler; /** * ...
- SQL Server 之 与 OVER() 函数
在SQL SERVER 2005/2008支持两种排名开窗函数和聚集开窗函数. 一. OVER() 函数 语法结构:OVER( [ PARTITION BY ... ] [ ORDER BY ... ...
- 首都医科大学附属北京安贞医院全院级PACS系统采购项目[转]
项目名称:首都医科大学附属北京安贞医院全院级PACS系统采购项目 项目编号:TC140VCF0 采购人名称:首都医科大学附属北京安贞医院 采购人地址:北京市朝阳区安贞里 采购人联系方式:010-644 ...