注解高级(原文再续书接上一回)

7.继承映射

第一种:InheritanceType.JOINED 查询时会出现很多join语句.

 package com.rong.entity.joined;

 import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table; @Entity
@Table(name="person")
//所有的持久化都会生成表(子类表会引用父类表的主键列)
//每个类都会生成一张表
//子类的表中会默认引用父类中的id
@Inheritance(strategy=InheritanceType.JOINED)
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
 package com.rong.entity.joined;

 import javax.persistence.Entity;
import javax.persistence.Table; @Entity
@Table(name="student")
public class Student extends Person{
private String number; public String getNumber() {
return number;
} public void setNumber(String number) {
this.number = number;
}
}

 package com.rong.test;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.Test; import com.rong.entity.joined.Person;
import com.rong.entity.joined.Student; public class HibernateTest {
@Test
public void test1(){
Configuration configuration=new Configuration().configure();
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
//插入
Student student=new Student();
student.setAge(18);
student.setName("悠悠");
student.setNumber("654321");
session.save(student);
//查询
Person person=(Person)session.get(Person.class, 1);
System.out.println(person);
Student stu=(Student) session.get(Student.class, 1);
System.out.println(stu.getId()+":"+stu.getName()+":"+stu.getNumber());
transaction.commit();
session.close();
sessionFactory.close();
}
}

第二种:InheritanceType.SINGLE_TABLE 所有子类属性中不能加非空约束

 package com.rong.entity.singletable;

 import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table; @Entity
@Table(name="person")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)// 单个表
@DiscriminatorColumn(name="dc",discriminatorType=DiscriminatorType.INTEGER)//辨别者列
@DiscriminatorValue(value="0")// 辨别者列值
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
 package com.rong.entity.singletable;

 import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Table; @Entity
@Table(name="student")
@DiscriminatorValue(value="1")// 辨别者列值
public class Student extends Person{
private String number; public String getNumber() {
return number;
} public void setNumber(String number) {
this.number = number;
}
}
 package com.rong.test;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.Test; import com.rong.entity.singletable.Person;
import com.rong.entity.singletable.Student; public class HibernateTest {
@Test
public void test1(){
Configuration configuration=new Configuration().configure();
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
//插入
Student student=new Student();
student.setAge(16);
student.setName("晓晓");
student.setNumber("3824");
session.save(student);
Person person=new Person();
person.setAge(19);
person.setName("达达");
session.save(person);
//查询
Person per=(Person)session.get(Person.class, 2);
System.out.println(per);
Student stu=(Student) session.get(Student.class, 1);
System.out.println(stu.getId()+":"+stu.getName()+":"+stu.getNumber());
transaction.commit();
session.close();
sessionFactory.close();
}
}

第三种:InheritanceType.TABLE_PER_CLASS 这种策略主键不能用自增长.查询时会出现union运算.

 package com.rong.entity.tableperclass;

 import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table; @Entity
@Table(name="person")
//所有的持久化都会生成表(子类会把父类中的属性继承过来生成在自己的表中)
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Person {
@Id
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
 package com.rong.entity.tableperclass;

 import javax.persistence.Entity;
import javax.persistence.Table; @Entity
@Table(name="student")
public class Student extends Person{
private String number; public String getNumber() {
return number;
} public void setNumber(String number) {
this.number = number;
}
}
 package com.rong.test;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.Test; import com.rong.entity.tableperclass.Student;
public class HibernateTest {
@Test
public void test1(){
Configuration configuration=new Configuration().configure();
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
//插入
Student student=new Student();
student.setId(1);
student.setAge(20);
student.setName("扣扣");
student.setNumber("1224832");
session.save(student);
//查询
Student stu=(Student) session.get(Student.class, 1);
System.out.println(stu.getId()+":"+stu.getName()+":"+stu.getNumber()
+":"+stu.getAge());
transaction.commit();
session.close();
sessionFactory.close();
}
}

Hibernate(五)的更多相关文章

  1. hibernate(五) hibernate一对一关系映射详解

    序言 之前讲解了一对多(单向.双向).多对多(双向),今天就讲解一下最后一个关系,一对一. 心情不错.状态也挺好的,赶紧写一篇博文造福一下大家把. --WH 一.一对一关系的概述 一对一关系看起来简单 ...

  2. Hibernate(五)__hql语句

    hql(hibernate query language)功能强大. 首先回忆下之前我们接触的对数据对象的操作: ①删除session.delete(对象) ②保存session.save(对象)   ...

  3. Hibernate五 HQL查询

    HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...

  4. Hibernate(五)——面向对象查询语言和锁

    Hibernate做了数据库中表和我们实体类的映射,使我们不必再编写sql语言了.但是有时候查询的特殊性,还是需要我们手动来写查询语句呢,Hibernate框架为了解决这个问题给我们提供了HQL(Hi ...

  5. ssh架构之hibernate(五)hql语句狂练

    1.练习题 1.查询所有商品的名称[查询特定属性](只有一个参数的话可以使用List<String>接收数据)2.查询所有商品的名称和供应商[查询特定属性](多个参数可以使用List< ...

  6. Hibernate(五)基本数据类型

    一.Hibernate的基本数据类型 3种数据类型之间的对应关系 Hibernate映射类型 Java类型 标准SQL类型 integer java.lang.Integer INTEGER long ...

  7. Hibernate(五)

    ================================criteria(QBC)查询========================QBC,(容器)又名对象查询:采用对象的方式(主要是cri ...

  8. Hibernate教程 ---简单易懂

    1 web内容回顾 (1)javaee三层结构 (2)mvc思想 2 hibernate概述 3 hibernate入门案例 4 hibernate配置文件 5 hibernate的api使用 Hib ...

  9. spring-第一章-基本用法

    一,简介 spring是一个开源框架 是一个非常强大的容器框架,分离项目组件之间的依赖关系,由spring容器管理整个项目的资源和配置; 通常我们可以称spring是容器大管家(项目大管家) 功能: ...

  10. 【Mybatis】 入门

    一.概述 1.1 JDBC 1.2 JDBC编程中问题 1.3 MyBatis介绍 1.4 Mybatis架构 二.MyBatis入门程序 2.1 需求 2.2 引入MyBatis依赖 2.3 配置 ...

随机推荐

  1. spring boot2整合dubbox全注解

    前题 dubbox是dubbo的一个升级版,简单说就是本来dubbo是阿里开发的,现在阿里不维护了,当当网拿过去继续开发.本来阿里的dubbo维护到2.6版本,而再高版本的都是当当网维护的就叫成dub ...

  2. 解决「matplotlib 图例中文乱码」问题

    在学习用 matplotlib 画图时遇到了中文显示乱码的问题,在网上找了很多需要修改配置的方法,个人还是喜欢在代码里修改. 解决方法如下: 在第2.3行代码中加上所示代码即可. import mat ...

  3. 【8086汇编-Day1】预备知识

    菜鸟的8086汇编入门之旅,偶有错处恭请大佬们指正. Ⅰ· 闲说一下 我为什么学汇编?相对于晦涩难懂的01010101011010机器语言(高低电平变化驱动机器做出不同反应),汇编语言用更便于记忆和使 ...

  4. 20155332 2006-2007-2 《Java程序设计》第3周学习总结

    学号 2006-2007-2 <Java程序设计>第3周学习总结 教材学习内容总结 尽量简单的总结一下本周学习内容 尽量不要抄书,浪费时间 看懂就过,看不懂,学习有心得的记一下 教材学习中 ...

  5. 20145226 《Java程序设计》第4周学习总结

    教材学习内容总结 学习目标 理解封装.继承.多态的关系 理解抽象类与接口的区别 掌握S.O.L.I.D原则 了解模式和设计模式 能正确覆盖方法 了解垃圾回收机制 掌握Object类 掌握enum 教材 ...

  6. 成都Uber优步司机奖励政策(4月10日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. 【SHOI2008】堵塞的交通

    题面 题解 这里提供几种不用脑子的算法(当然是离线的): $\text{LCT}$ 记下每条边的删除时间,用$\text{LCT}$维护最大生成树,每次加进一条边时,跟原来那条链上的做比较,删除那条删 ...

  8. Apache入门 篇(二)之apache 2.2.x常用配置解析

    一.httpd 2.2.x目录结构 Cnetos 6.10 YUM安装httpd 2.2.x # yum install -y httpd 程序环境 主配置文件: /etc/httpd/conf/ht ...

  9. OpenStack入门篇(三)之KVM介绍及安装

    1.什么是虚拟化? 虚拟化是云计算的基础.简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU.内存.IO 硬件资源,但逻辑上虚拟机之间是相互隔离的. 物理机我们一般称 ...

  10. django使用流程

    1.安装django包 (命令行)>pip install django # conda install django 2.安装成功后,可以新建django项目 1(命令行)>django ...