Hibernate实体对象继承的三种方法

所属分类: 网络编程 / JSP编程 阅读数: 1958
收藏 0 赞 0 分享

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 使用jstl实现翻页实例代码

这篇文章主要介绍了jsp 使用jstl实现翻页实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Jsp中的table多表头导出excel文件具体实现

这篇文章主要介绍了Jsp中的table多表头导出excel文件具体实现,有需要的朋友可以参考一下
收藏 0 赞 0 分享

java(jsp)整合discuz同步登录功能详解

jsp整合discuz同步登录功能详解,Uenter是Comsenz旗下各个产品之间信息直接传递的一个桥梁,通过UCenter站长可以无缝整合Comsenz系列产品,Center拥有机制完善的接口,经过简单修改便可以挂接其它任何平台的第三方的网络应用程序
收藏 0 赞 0 分享

jsp页面传参乱码的解决方法

本篇文章主要是对jsp页面传参乱码的解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

jsp分页显示的实现代码

这篇文章主要介绍了jsp分页显示的实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Linux和Windows中tomcat修改内存大小的方法

Linux和Windows中tomcat修改内存大小的方法,可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置,大家参考使用吧
收藏 0 赞 0 分享

使用maven+eclipse搭建struts2开发环境

Struts 2是Apache基金会的明星级产品,提供了对MVC的一个清晰的实现,下面就为大家介绍一下使用maven+eclipse搭建struts2开发环境的方法
收藏 0 赞 0 分享

jsp网页计数器实现示例

网页计数器想必大家都有见到过吧,记录每一个访问者,下面有个不错的示例,感兴趣的朋友可以参考下
收藏 0 赞 0 分享

jsp页面间传中文参数示例(页面传参数编码)

在url地址栏使用中文传参数可能会是乱码了,下面我们来看看正确的jsp中页面间传中文参数转码的方法
收藏 0 赞 0 分享

servlet分页代码示例

本文介绍了servlet分页代码实现,采用Oracle数据库,获取SCOTT用户EMP表中的数据,分页实现步骤看下面代码
收藏 0 赞 0 分享
查看更多