hibernate继承映射策略之每个子类一张表
来源:互联网 发布:一句话自我介绍 知乎 编辑:程序博客网 时间:2024/03/29 21:10
以文章《hibernate单表继承映射》中的几个类为例,我们来看下“每个子类一张表”的映射策略。
与之不同的是Person.hbm.xml配置文件,代码如下:
<hibernate-mapping package="com.test.pojo"><class name="Person"><id name="id"><!-- assigned:自己指定主键 --><generator class="assigned"></generator></id><property name="name" /><property name="age" /><joined-subclass name="Student"><key column="id" /><property name="work" /></joined-subclass><joined-subclass name="Teacher"><key column="id" /><property name="salary" /></joined-subclass></class></hibernate-mapping>测试类:
public class HibernateTest {@Testpublic void testCreateDB(){Configuration cfg=new Configuration().configure();SchemaExport se=new SchemaExport(cfg);//第一个参数表示是否生成ddl脚本,第二个参数表示是否执行到数据库中se.create(true, true);}/** * 保存数据 */@Testpublic void save(){Session session=null;Transaction tx=null;try{session=HibernateUtil.getSession();tx=session.beginTransaction();Teacher teacher=new Teacher();teacher.setId(1);teacher.setName("teacher");teacher.setAge(20);teacher.setSalary(5000);Student student=new Student();student.setId(2);student.setName("stu1");student.setAge(20);student.setWork("hello world");Student stu=new Student();stu.setId(3);stu.setName("stu2");stu.setAge(21);stu.setWork("Struts2");session.save(student);session.save(stu);session.save(teacher);tx.commit();}catch(Exception e){if(tx!=null)tx.rollback();e.printStackTrace();}finally{HibernateUtil.closeSession();}}}执行testCreateDB,打印信息如下:
alter table Student drop foreign key FK_ohs43dct8k52ch2exlmf4bs3lalter table Teacher drop foreign key FK_g6jmt7fcm6gfd0jvhimb9xy84drop table if exists Person drop table if exists Student drop table if exists Teacher create table Person ( id integer not null, name varchar(255), age integer, primary key (id) ) create table Student ( id integer not null, work varchar(255), primary key (id) ) create table Teacher ( id integer not null, salary integer, primary key (id) ) alter table Student add constraint FK_ohs43dct8k52ch2exlmf4bs3l foreign key (id) references Person (id) alter table Teacher add constraint FK_g6jmt7fcm6gfd0jvhimb9xy84 foreign key (id) references Person (id)
数据库表信息如下:
执行save方法,打印sql语句如下:
Hibernate: insert into Person (name, age, id) values (?, ?, ?)Hibernate: insert into Student (work, id) values (?, ?)Hibernate: insert into Person (name, age, id) values (?, ?, ?)Hibernate: insert into Student (work, id) values (?, ?)Hibernate: insert into Person (name, age, id) values (?, ?, ?)Hibernate: insert into Teacher (salary, id) values (?, ?)
数据库表信息如下:
总结:
三种继承映射比较:
1、所有数据存一张表,数据冗余比较多。效率比较高。---推荐使用
2、每个子类一张表,数据冗余比较少,查询效率低,主键不能自增。需要指明为assigned,uuid,hilo等。
3、每个类一张表,数据冗余比较少。查询效率比每个子类一张表稍高。维护的表个数多。
阅读全文
0 0
- hibernate继承映射策略之每个子类一张表
- Hibernate学习笔记:继承映射之每个子类一张表
- Hibernate继承映射方式之每个子类一张表
- hibernate继承映射策略之每个具体类一张表
- Hibernate学习笔记:继承映射之每个子类一张表,使用辨别标志
- Hibernate映射类继承之每个带有隐式多态的具体类一张表(每个子类各一张表,有各自的映射文件)
- Hibernate映射类继承之每个带有联合的具体类一张表(每个子类各一张表,共用一个父类映射文件)
- Hibernate继承映射之每个类一张表
- Hibernate继承映射之每个具体类一张表
- Hibernate继承映射:每个子类一张表(joined-subclass)表结构
- hibernate继承关系映射关系方法(二)--每个子类一张表
- 用每个子类一张表的方式进行Hibernate映射
- Hibernate学习笔记:继承映射之每个类继承结构一张表
- Hibernate学习笔记:混合使用每个继承结构一张表 和 每个子类一张表
- Hibernate映射类继承之每个类层次结构一张表(父子类共用一张表,一个映射文件)
- Hibernate 继承映射实现方式之每个具体类对应一张表
- Hibernate 继承映射实现方式之每个具体类对应一张表
- 十三、实体继承映射(每个子类映射成一张表)
- iOS逆向--dumpdecrypted砸壳
- LCD驱动--层次分析
- 筛法
- opengl学习
- Maven Tomcat7 实现自动化部署
- hibernate继承映射策略之每个子类一张表
- Java中获取键盘输入值的三种方法
- linux cpu、内存、IO、网络的测试工具
- 并查集例题二
- vue在win7下的配置
- SVN只checkout目录,不包括内容
- BZOJ 2079 [Poi 2010] 图论 解题报告
- 8.15 multi 第七场 经验总结
- 书写SQL语句的一些小技巧