用一张

每一个类一张表

建立外键

第一种 一张总表

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(); }

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

最新文章

  1. TCP流量控制与拥塞控制
  2. C++ explicit关键字详解
  3. 由于某IP大频率提交评论导致服务器宕机
  4. 。net新人报道
  5. SharePoint 2013 VSS 编写器
  6. C#字符操作
  7. 黑客入门之IP地址及常用命令
  8. 使用pgbench测试PostgreSQL
  9. js封装 与 js高级用法 问题集合
  10. iOS开发--UITableView
  11. Linq基本用法
  12. SGU 149. Computer Network
  13. Storm之路-WordCount-实例
  14. Flink on yarn的配置及执行
  15. navicat使用ssh登录mysql报错:expected key exchange group packet from server
  16. js 函数与类的区别
  17. Android 电池系列
  18. 如何批量的在django中对url进行用户登陆限制
  19. Spark之机器学习(Python版)(一)——聚类
  20. date 类型转为varchar

热门文章

  1. maven入门安装及HelloWorld实现
  2. Delphi如何找到出错行的行数!!
  3. Centos配置iptables开放ftp服务
  4. tips:Java中的switch的选择因子
  5. 提示:pip install --upgrade pip
  6. EasyuiDatagird绑定分页.NetMVC
  7. spring 事务回滚。
  8. Geany 编辑器打开 高亮所选单词 功能
  9. system.data oracleClient 需要Oracle客户端8.1.7或high
  10. 关于thinkphp5被入侵后的一些思考