Hibernate实体对象继承策略
来源:互联网 发布:linux修改dns立即生效 编辑:程序博客网 时间:2024/04/20 01:31
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")指明子类表相对于父类表外键的名称。
0 0
- Hibernate实体对象继承策略
- Hibernate 实现继承实体
- hibernate 实体的继承
- JPA实体继承实体的映射策略
- JPA实体继承实体的映射策略
- JPA实体继承实体的映射策略
- JPA实体继承实体的映射策略
- hibernate继承策略
- Hibernate继承策略
- Hibernate继承映射策略
- HIbernate继承映射策略
- HIbernate 操纵实体对象
- Hibernate查询实体对象
- hibernate实体对象生命周期
- hibernate 多继承实体配置
- JPA 对象继承策略
- JPA实体继承关系的映射策略
- 解读Hibernate继承映射策略
- jsp,velocity,freemark页面引擎的比较
- redis 集群
- 函数的末尾
- 【基础训练】HDOJ2032杨辉三角
- 64位+VS2013+OpenCV2.4.9+CMake+TBB 编译OpenCV源码
- Hibernate实体对象继承策略
- win7下向C:\Windows\System32目录下拷贝文件并注册ocx组件
- ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
- 循环设计
- Cocos2d-x 创建骨骼动画
- 2.2.4 PARTY LAMPS 派对灯
- 【干货】国外程序员整理的 C++ 资源大全
- 使用HD/IDE layer的ioctl接口获取磁盘详细信息device_identify
- O2O闭环关键在数据流转