Hibernate(五)
注解高级(原文再续书接上一回)
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(五)的更多相关文章
- hibernate(五) hibernate一对一关系映射详解
序言 之前讲解了一对多(单向.双向).多对多(双向),今天就讲解一下最后一个关系,一对一. 心情不错.状态也挺好的,赶紧写一篇博文造福一下大家把. --WH 一.一对一关系的概述 一对一关系看起来简单 ...
- Hibernate(五)__hql语句
hql(hibernate query language)功能强大. 首先回忆下之前我们接触的对数据对象的操作: ①删除session.delete(对象) ②保存session.save(对象) ...
- Hibernate五 HQL查询
HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...
- Hibernate(五)——面向对象查询语言和锁
Hibernate做了数据库中表和我们实体类的映射,使我们不必再编写sql语言了.但是有时候查询的特殊性,还是需要我们手动来写查询语句呢,Hibernate框架为了解决这个问题给我们提供了HQL(Hi ...
- ssh架构之hibernate(五)hql语句狂练
1.练习题 1.查询所有商品的名称[查询特定属性](只有一个参数的话可以使用List<String>接收数据)2.查询所有商品的名称和供应商[查询特定属性](多个参数可以使用List< ...
- Hibernate(五)基本数据类型
一.Hibernate的基本数据类型 3种数据类型之间的对应关系 Hibernate映射类型 Java类型 标准SQL类型 integer java.lang.Integer INTEGER long ...
- Hibernate(五)
================================criteria(QBC)查询========================QBC,(容器)又名对象查询:采用对象的方式(主要是cri ...
- Hibernate教程 ---简单易懂
1 web内容回顾 (1)javaee三层结构 (2)mvc思想 2 hibernate概述 3 hibernate入门案例 4 hibernate配置文件 5 hibernate的api使用 Hib ...
- spring-第一章-基本用法
一,简介 spring是一个开源框架 是一个非常强大的容器框架,分离项目组件之间的依赖关系,由spring容器管理整个项目的资源和配置; 通常我们可以称spring是容器大管家(项目大管家) 功能: ...
- 【Mybatis】 入门
一.概述 1.1 JDBC 1.2 JDBC编程中问题 1.3 MyBatis介绍 1.4 Mybatis架构 二.MyBatis入门程序 2.1 需求 2.2 引入MyBatis依赖 2.3 配置 ...
随机推荐
- 基于EasyX库的贪吃蛇游戏——C语言实现
接触编程有段时间了,一直想学习怎么去写个游戏来练练手.在看了B站上的教学终于可以自己试试怎么实现贪吃蛇这个游戏了.好了,废话不多说,我们来看看如何用EasyX库来实现贪吃蛇. 一.准备 工具vc++6 ...
- STM32F103C8T6、STM32F103ZET6工程模板
STM32F103C8T6工程模板,推荐使用以下最新版本 最终版 2018 7 16 https://pan.baidu.com/s/1lIdZ2awus_quVu332RvJ6Q https:// ...
- bmob关联表
var DDB_User = Bmob.Object.createWithoutData("DDB_User", "b2fd2fe68f"); // var T ...
- Oracle入门第四天(下)——约束
一.概述 1.分类 表级约束主要分为以下几种: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK 2.注意事项 如果不指定约束名 ,Oracle server ...
- 记boost在gcc的一个库链接问题generic_category()
报错大致如下: main.cpp:(.text+0x49): undefined reference to `boost::system::generic_category()'main.cpp:(. ...
- sqlite3日期数据类型
一.sqlite3日期数据类型,默认用datetime解析(根据stackflow) 使用时注意三点: 1. 创建表时,字段 DT 的类型为 date 2. 插入数据时,DT字段直接为 str 类型 ...
- 【LG4841】城市规划
[LG4841]城市规划 题面 洛谷 题解 记\(t_i\)表示\(i\)个点的无向图个数,显然\(t_i=2^{C_i^2}\). 设\(f_i\)表示\(i\)个点的无向连通图个数,容斥一下,枚举 ...
- MSP-EZ430U_02板子测试使用
1. 实物如下 2. 先上电,显示驱动没安装 3. 找到驱动的位置,不过实际上安装IAR for msp430之后,驱动就自动的识别了.
- [深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别
内容 背景 准备 实践 结果 总结 引用 背景 老规矩,先上代码吧 代码所在: https://github.com/BruceDone/darknet_demo 最近在做深度学习相关的项目的时候,了 ...
- 人脸检测及识别python实现系列(3)——为模型训练准备人脸数据
人脸检测及识别python实现系列(3)——为模型训练准备人脸数据 机器学习最本质的地方就是基于海量数据统计的学习,说白了,机器学习其实就是在模拟人类儿童的学习行为.举一个简单的例子,成年人并没有主动 ...