Hibernate继承策略
来源:互联网 发布:淘宝买东西后退款bug 编辑:程序博客网 时间:2024/03/29 19:19
Hibernate继承策略总共有三种,一种是共用一张表;一种是每个类一张表,表里面储存子类的信息和父类的信息;还有一种是通过表连接的方式,每个类都有一张表,但是子类对应的表只保存自己的信息,父类对应的表保存父类的信息,它们之间通过子类表和父类表的关联来获取所有的信息。
第一种方式,即共用一张表:
@Entity@Inheritance(strategy=InheritanceType.SINGLE_TABLE)@DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING)//表示区分不同的对象的字段名@DiscriminatorValue("person")//用来表示该对象是何种对象的,即区分器public class Parent {private int id;private String name;@Id@GeneratedValuepublic 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;}}@Entity@DiscriminatorValue("child1")public class Child1 extends Parent {private String email;public String getEmail() {return title;}public void setEmail(String email) {this.email = email;}}@Entity@DiscriminatorValue("child2")public class Child2 extends Parent {private String address;public String getAddress() {return score;}public void setAddress(String address) {this.address = address;}}
这种情况父类和所有子类的所有信息都保存在同一张表里面,通过我们指定的@DiscriminatorColumn对应的@DiscriminatorValue来区别不同的类。 当没有指定@DiscriminatorValue的时候将使用全类名来作为DiscriminatorValue。
第二种策略是每个类一张表,保存所有信息:
@Entity@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)@TableGenerator(//一个类一张表,最重要的是要保证它们的id由一个生成器产生,@TableGenerator就是为了控制这个的name="t_gen",table="t_gen_table",pkColumnName="t_pk",valueColumnName="t_value",pkColumnValue="person_pk",initialValue=1,allocationSize=1)public class Parent {private int id;private String name;@Id@GeneratedValue(generator="t_gen", strategy=GenerationType.TABLE)//这个就是用表生成器生成的,用同一个生成器就可以控制它们的id不重复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;}}@Entitypublic class Child2 extends Parent {private String address;public String getAddress() {return score;}public void setAddress(String address) {this.address = address;}}@Entitypublic class Child1 extends Parent {private String email;public String getEmail() {return title;}public void setEmail(String email) {this.email = email;}}
弟三种方式是采用表连接的方式:
@Entity@Inheritance(strategy=InheritanceType.JOINED)public class Parent {private int id;private String name;@Id@GeneratedValuepublic 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;}}@Entitypublic class Child2 extends Parent {private String address;public String getAddress() {return score;}public void setAddress(String address) {this.address = address;}}@Entitypublic class Child1 extends Parent {private String email;public String getEmail() {return title;}public void setEmail(String email) {this.email = email;}}
采用表连接的情况,还是每个类拥有自己的一张表,只是子类对应的表只保存子类的信息,其父类的信息由父类的表保存。当需要获取子类的完整信息时通过表连接的方式连接子类的表和父类的表获取对应信息。可以在子类的表上标注@PrimaryKeyJoinColumn(name="foreignKeyName")指明子类表相对于父类表外键的名称。
0 0
- hibernate继承策略
- Hibernate继承策略
- Hibernate继承映射策略
- HIbernate继承映射策略
- 解读Hibernate继承映射策略
- 解读Hibernate继承映射策略
- Hibernate实体对象继承策略
- Hibernate继承映射的两种策略
- Hibernate继承映射三种策略学习
- Hibernate 之单表继承映射策略
- Hibernate的3种继承映射策略
- Hibernate映射类继承之混合继承策略
- hibernate继承的三种映射策略( Inheritance mapping)
- Hibernate支持三种基本的继承映射策略:
- hibernate继承映射策略之每个具体类一张表
- hibernate继承映射策略之每个子类一张表
- Hibernate实战_笔记31(混合继承策略、如何选择策略)
- Hibernate---继承
- 回顾Swing的一些内容
- DWR3访问WEB元素的两种方法
- 读Properties文件和往Properties文件里面写内容
- 后台动态添加布局文件、控件与动态设置属性
- struts2访问WEB元素
- Hibernate继承策略
- ie和firefox中通用的设置div最小高度和达到这一最小高度后自适应的css代码
- 用.htaccess实现二级域名功能
- poi对excel的基本读写操作
- itext生成pdf文件的HelloWorld
- BeanUtils的用法
- win764位_java连接access数据库
- 第一个 Ajax 入门实例
- Java原型模式之浅拷贝-深拷贝