Hibernate实体对象继承的三种方法
网络编程 2021-07-05 11:23www.168986.cn编程入门
这篇文章主要介绍了Hibernate实体对象继承的方法的相关资料,需要的朋友可以参考下
Hibernate实体对象继承的方法
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 @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; } } @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; } } @Entity public class Child2 extends Parent { private String address; public String getAddress() { return score; } public void setAddress(String address) { this.address = address; } } @Entity public 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 @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; } } @Entity public class Child2 extends Parent { private String address; public String getAddress() { return score; } public void setAddress(String address) { this.address = address; } } @Entity public class Child1 extends Parent { private String email; public String getEmail() { return title; } public void setEmail(String email) { this.email = email; } }
采用表连接的情况,还是每个类拥有自己的一张表,只是子类对应的表只保存子类的信息,其父类的信息由父类的表保存。当需要获取子类的完整信息时通过表连接的方式连接子类的表和父类的表获取对应信息。可以在子类的表上标注@PrimaryKeyJoinColumn(name="foreignKeyName")指明子类表相对于父类表外键的名称。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇:Jsp自定义标签和方法详解
下一篇:SpringMVC自定义属性编辑器详解及实例
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程