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 配置 ...
随机推荐
- Flume(3)-安装部署
一. 下载 Flume官网地址 http://flume.apache.org/ 文档查看地址 http://flume.apache.org/FlumeUserGuide.html 下载地址 htt ...
- linux-2.6.22.6内核启动分析之配置
配置过程最终结果是生成.config文件,我们想要对配置的目的有很清楚的了解,必须先对.config文件进行分析.通过cd命令切换到linux-2.6.22.6内核目录,输入vi .config 可以 ...
- 开了几天的phpmyadmin的总结
近来无事,免费体验了一波腾讯云的vps,打了一个phpstudy,全部默认的配置,只不过,没有给他写入文件的权限 开启了日志,看了下,这几天黑客们的活动 首先,有两三个ip来爆破我的phpmyadmi ...
- Opencv3.0-python: 编译报错color.cpp:7456: error: (-215) scn == 3 || scn == 4 的解决方案
结合Opencv3.0读取视频时,出现报错:C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:11111: error: ( ...
- SpringMVC 中,当前台传入多个参数时,可将参数封装成一个bean类
在实际业务场景中,当前台通过 url 向后台传送多个参数时,可以将参数封装成一个bean类,在bean类中对各个参数进行非空,默认值等的设置. 前台 url ,想后台传送两个参数,userName 和 ...
- # 第五周课下测试(ch03)补交
第五周课下测试(ch03)补交 1.( 多选题 | 1 分) 有关gdb调试汇编,下面说法正确的是() A . 可以用disas反汇编当前函数 B . 以16进制形式打印%rax中内容的命令是 pri ...
- 20155304 2016-2017-2 《Java程序设计》实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 没有Linux ...
- PostgreSQL的hstore初步学习
安装hstore: 进入源代码的 /contrib/hstore 目录,然后执行gmake 和 gmake install: [root@pg200 hstore]# gmake gcc -O2 -W ...
- centos7.5yum安装mysql(官方yum源比较慢)
mysql的部署 查看Linux发行版本 cat /etc/redhat-release 下载MySQL官方的Yum Repository wget -i http://dev.mysql.com/g ...
- CF 96 D. Volleyball
D. Volleyball http://codeforces.com/contest/96/problem/D 题意: n个路口,m条双向路,每条长度为w.每个路口有一个出租车司机,最多可以乘坐这辆 ...