用一张

每一个类一张表

建立外键

第一种 一张总表

Person

package com.bjsxt.hibernate;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType; @Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue("person")
public class Person {
private int id;
private String name; @Id
@GeneratedValue
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;
} }

Student.

package com.bjsxt.hibernate;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity; @Entity
@DiscriminatorValue("student")
public class Student extends Person { private int score; public int getScore() {
return score;
} public void setScore(int score) {
this.score = score;
} }

Teacher

package com.bjsxt.hibernate;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity; @Entity
@DiscriminatorValue("teacher")
public class Teacher extends Person {
private String title; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} }

testsave

package com.bjsxt.hibernate;

import java.util.Map;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; public class HibernateORMappingTest {
private static SessionFactory sessionFactory; @BeforeClass
public static void beforeClass() {
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}
@AfterClass
public static void afterClass() {
sessionFactory.close();
} @Test
public void testSave() {
Student s = new Student();
s.setName("s1");
s.setScore();
Teacher t = new Teacher();
t.setName("t1");
t.setTitle("中级"); Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(s);
session.save(t);
session.getTransaction().commit();
session.close();
}
@Test
public void testLoad() { testSave();
Session session = sessionFactory.openSession();
session.beginTransaction();
Student s = (Student)session.load(Student.class, );
System.out.println(s.getScore());
Person p = (Person)session.load(Person.class, );
System.out.println(p.getName());
session.getTransaction().commit();
session.close(); } @Test
public void testSchemaExport() {
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
} public static void main(String[] args) {
beforeClass();
}
}

testload

    @Test
public void testLoad() { testSave();
Session session = sessionFactory.openSession();
session.beginTransaction();
Student s = (Student)session.load(Student.class, );
System.out.println(s.getScore());
Person p = (Person)session.load(Person.class, );
System.out.println(p.getName());
session.getTransaction().commit();
session.close(); }

这种方式会产生大量冗余字段 比如存Teacher会导致score为空等 适合数据量少使用

第二种方式 每一个类一个表

Person

package com.bjsxt.hibernate;

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.TableGenerator; @Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@TableGenerator(
name="t_gen",
table="t_gen_table",
pkColumnName="t_pk",
valueColumnName="t_value",
pkColumnValue="person_pk",
initialValue=,
allocationSize=
)
public class Person {
private int id;
private String name; @Id
@GeneratedValue(generator="t_gen", strategy=GenerationType.TABLE)
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;
} }

Student

package com.bjsxt.hibernate;

import javax.persistence.Entity;

@Entity
public class Student extends Person { private int score; public int getScore() {
return score;
} public void setScore(int score) {
this.score = score;
} }

teacher

package com.bjsxt.hibernate;

import javax.persistence.Entity;

@Entity
public class Teacher extends Person {
private String title; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} }

testsave

    @Test
public void testSave() {
Student s = new Student();
s.setName("s1");
s.setScore();
Teacher t = new Teacher();
t.setName("t1");
t.setTitle("中级"); Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(s);
session.save(t);
session.getTransaction().commit();
session.close();
}

testload

    @Test
public void testLoad() {
testSave();
Session session = sessionFactory.openSession();
session.beginTransaction();
Student s = (Student)session.load(Student.class, );
System.out.println(s.getScore());
Person p = (Person)session.load(Person.class, ); //会从teacher和student中取出数据 联合生成一个表,然后从里面找出id为2的
System.out.println(p.getName());
session.getTransaction().commit();
session.close();

第三种方式 外键关联

Person

package com.bjsxt.hibernate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType; @Entity
@Inheritance(strategy=InheritanceType.JOINED) public class Person {
private int id;
private String name; @Id
@GeneratedValue
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;
} }

Teache

package com.bjsxt.hibernate;

import javax.persistence.Entity;

@Entity
public class Teacher extends Person {
private String title; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} }

student

package com.bjsxt.hibernate;

import javax.persistence.Entity;

@Entity
public class Student extends Person { private int score; public int getScore() {
return score;
} //Person p = Person(load(1)); public void setScore(int score) {
this.score = score;
} }

testsave

package com.bjsxt.hibernate;

import javax.persistence.Entity;

@Entity
public class Student extends Person { private int score; public int getScore() {
return score;
} //Person p = Person(load(1)); public void setScore(int score) {
this.score = score;
} }

testload

    @Test
public void testLoad() {
testSave();
Session session = sessionFactory.openSession();
session.beginTransaction();
Student s = (Student)session.load(Student.class, );
System.out.println(s.getScore());
Person p = (Person)session.load(Person.class, ); //合成一个表取出来数据
System.out.println(p.getName());
session.getTransaction().commit();
session.close(); }

一般来说 用第三种和第一种比较多

Hibernate 再接触 继承映射的更多相关文章

  1. Hibernate 再接触 集合映射

    不太重要 List 用于排序 Map  key一般是user的某个字段(多半是主键 integer) package com.bjsxt.hibernate; import java.util.Has ...

  2. Hibernate 再接触 组件映射

    将另外一个类嵌入到另外一个类 从而合并生成一张表 Husband.java package com.bjsxt.hibernate; import javax.persistence.Embedded ...

  3. Hibernate 再接触 关系映射 一对一单向外键联合主键关联

    例子: Husband.java package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persiste ...

  4. Hibernate 再接触 关系映射 一对一双向外键关联

    凡是双向关联必设mapped by  由对方主导 wifi.java package com.bjsxt.hibernate; import javax.persistence.Entity; imp ...

  5. Hibernate 再接触 关系映射 一对一单向外键关联

    对象之间的关系 数据库之间的关系只有外键 注意说关系的时候一定要反面也要说通 CRUD 数据库之间设计 主键关联 单向的外键关联 中间表 一对一单向外键关联 Husband.java package ...

  6. Hibernate中的继承映射

    1.继承映射 继承映射分为两种情况:简单继承映射和继承映射. 在简单继承映射中,每个子类都要写一个映射文件. 在继承映射中,只使用一个映射文件.继承映射分为三种情况: 所有子类映射到一张表 需要使用鉴 ...

  7. 【Hibernate 5】继承映射配置及多态查询

    一.继承实现的三种策略 1.1,单表继承.每棵类继承树使用一个表(table per class hierarchy) -->本文主要介绍的继承策略 类继承树对应多个类,要把多个类的信息存放在一 ...

  8. 【Hibernate步步为营】--继承映射具体解释

    上篇文章讨论了多对多映射,在使用多对多映射时重点是使用<many-to-many>标签,并在标签的两端加入外键这样在生成关系时会创建两个关系之间的关系表,通过关系表来维护它们之间的关系,另 ...

  9. Hibernate 再接触 悲观锁和乐观锁

    为什么取1248 二进制 CRUD 移位效率高 在并发和效率选择一个平衡点 一般不会考虑幻读 因为我们不会再一个事务里查询两次,(只能设置为seralizable) 悲观锁和乐观锁的前提是read-u ...

随机推荐

  1. 将本地代码提交至gitHub

    1.注册github账号 2.本地安装git 3.打开需要提交代码的目录 4.右击git bash here 5. $ git init 6  $ ssh-keygen -t rsa -C " ...

  2. tp5生成小程序推广二维码

    //获取用户经销商信息 及生成推广二维码 public function qrcode() { //拿到openid 查找用户表内是否有该用户 没有则拒绝生成二维码 有则查看是否已生成二维码 有生成则 ...

  3. mysql短日期 长时间转换为短日期

    fabutime    2018-09-26 15:27:03 date_format( fabutime,\'%Y-%m-%d\') as fabutime fabutime   2018-09-2 ...

  4. 自然语言处理领域重要论文&资源全索引

    自然语言处理(NLP)是人工智能研究中极具挑战的一个分支.随着深度学习等技术的引入,NLP领域正在以前所未有的速度向前发展.但对于初学者来说,这一领域目前有哪些研究和资源是必读的?最近,Kyubyon ...

  5. Struts2学习:Action使用@Autowired注入为null的解决方案

    1.pom.xml引入struts2-spring-plugin <dependency> <groupId>org.apache.struts</groupId> ...

  6. flask session,蓝图,装饰器,路由和对象配置

    1.Flask 中的路由   *endpoint - url_for 反向地址  *endpoint 默认是视图函数名  *methods 指定视图函数的请求方式,默认GET  defaults={& ...

  7. apt-get 常用命令总结

    apt-get  高级包装工具(英语:Advanced Packaging Tools,简称:APT)是Debian及其衍生发行版(如:ubuntu)的软件包管理器.APT可以自动下载,配置,安装二进 ...

  8. MySQL 可以用localhost 连接,但不能用IP连接的问题

    连接问题 由于数据库配置的问题,当我们用ip连接数据库时,会出现连接不上的情况,而用localhost连接则没有任何的问题.解决方法: mysql安装完后,默认是root用户,root用户只能在服务器 ...

  9. hadoop2.4集群的搭建

    hadoop中的三大组件: hdfs:分布式文件管理系统 (namenode管理所有的datanode) yarn:资源调度系统(ResourceManager管理所有的nodemanager) ma ...

  10. js五子棋游戏

    //code <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...