hibernate继承关系的映射(single_table,class_per_table,joined)
来源:互联网 发布:免费挂机赚钱软件 编辑:程序博客网 时间:2024/06/03 21:14
转自:http://blog.csdn.net/centre10/article/details/6092942
hibernate对象之间存在继承关系,该如何映射呢?有3中方式,反映在数据库表上:
Single table:Student和Teacher类的父类是Person类,用一张数据库表反应3个类的所有信息。这样设计的缺点是:表的信息反映了所有类的属性,造成大量的数据冗余。
Table per class:为每个类设计一张表,其缺点是:
Joined:用一张表存共有的字段,而其子类对应的表存其特有字段。优缺点:查询能提高效率,然而需要作表连接,当添加新的子类时,需要添加新的表。
Annotation:
⑴sigle_table:
package com.xie.hibernate.modal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
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;
import javax.persistence.JoinColumn;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import com.sun.xml.internal.bind.v2.runtime.Name;
@Entity
//指定继承映射的策略
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
//在数据库表中加上一个字段,用以区分是哪个子类,name表示表的字段名字,discriminatorType
//表示name字段的数据类型
@DiscriminatorColumn(name="dis",discriminatorType=DiscriminatorType.STRING)
//指定这个类存到数据库中用什么区分,value表明dis的值
@DiscriminatorValue(value="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;
}
}
package com.xie.hibernate.modal;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@DiscriminatorValue("student")
public class Student extends Person {
private int score;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
package com.xie.hibernate.modal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@DiscriminatorValue("teacher")
public class Teacher extends Person{
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
⑵table_per_class:
package com.xie.hibernate.modal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
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.JoinColumn;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import com.sun.xml.internal.bind.v2.runtime.Name;
@Entity
//指定继承映射的策略
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@TableGenerator(
name="k_gen",
table="key_table",
pkColumnName="p_key",
pkColumnValue="p_value",
initialValue=1,
allocationSize=1
)
public class Person {
private int id;
private String name;
@Id
@GeneratedValue(generator="k_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;
}
}
package com.xie.hibernate.modal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
public class Teacher extends Person{
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
⑶joined:
package com.xie.hibernate.modal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
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.JoinColumn;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import com.sun.xml.internal.bind.v2.runtime.Name;
@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;
}
}
package com.xie.hibernate.modal;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
public class Student extends Person {
private int score;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
package com.xie.hibernate.modal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
public class Teacher extends Person{
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
- hibernate继承关系的映射(single_table,class_per_table,joined)
- hibernate继承关系的映射(single_table,class_per_table,joined)
- hibernate继承关系的映射(single_table,class_per_table,joined)
- hibernate中继承映射的三种方式(SINGLE_TABLE,TABLE_PER_CLASS,JOINED)
- Hibernate 继承关系 对象关系映射--joined-subclass ,测试 crud
- hibernate 继承映射 joined-subclass
- hibernate 继承映射 joined-subclass
- hibernate 继承映射joined-subclass
- (12)映射继承关系三之连接的子类(@Inheritance(strategy=InheritanceType.JOINED))
- 继承关系映射--joined-subclass 元素映射继承关系
- (8) ebj学习: Jpa的SINGLE_TABLE,JOINED,TABLE_PER_CLASS三种继承策略
- Hibernate中的Entity类之间的继承关系之二SINGLE_TABLE
- hibernate的继承关系映射(一)
- Hibernate映射之“继承映射”-joined and union
- Hibernate继承映射(简单继承,subclass,joined-subclass,union-subclass)
- (10)映射继承关系一之继承关系都映射在一张表中(@Inheritance(strategy=InheritanceType.SINGLE_TABLE))
- Hibernate中的Entity类之间的继承关系之三JOINED
- Hibernate(六)Hibernate继承关系映射
- 康托展开、逆展开、魔板问题
- C API Socket 连接时间服务器,并修改自己系统的时间(对时)
- problem中Project'XX'is missing required library:'[路径]\XXX.jar'解决方法
- MVN 命令记录
- _block
- hibernate继承关系的映射(single_table,class_per_table,joined)
- Java常用容器比较分析
- JVM(一)------基本结构
- CentOS 7.0,启用iptables防火墙(转)
- Eclipse中修改SVN用户名和密码方法
- 我与“百科全书”的故事---祝贺《信息通信技术百科全书》正式出版!
- SQL SERVER CDC变更数据捕获
- 【一个经典的google面试题】在浏览器中输入Google.com并且按下回车之后发生了什么?
- iOS错误:Undefined symbols for architecture arm64