千家信息网

怎么用Hibernate处理没有主键的视图

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇文章主要介绍"怎么用Hibernate处理没有主键的视图",在日常操作中,相信很多人在怎么用Hibernate处理没有主键的视图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2024年11月18日怎么用Hibernate处理没有主键的视图

这篇文章主要介绍"怎么用Hibernate处理没有主键的视图",在日常操作中,相信很多人在怎么用Hibernate处理没有主键的视图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用Hibernate处理没有主键的视图"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

  1. 视图的详情

SELECT TEST_FLIGHT_TIME AS TESTTIME,JIHAO AS JIHAO,'1' AS TYPE,FP_ID,REF_ID FROM S_FLIGHT_PLAN -- 1:主机检查时间

UNION

SELECT INSPECT_TIME AS TESTTIME,JIHAO AS JIHAO,'2' AS TYPE,FP_ID,REF_ID FROM S_FLIGHT_PLAN -- 2:主机试飞时间

UNION

SELECT TEST_FLIGHT_TIME1 AS TESTTIME,STANDBY_PLANE AS JIHAO,'3' AS TYPE,FP_ID,REF_ID FROM S_FLIGHT_PLAN -- 3:备份机检查时间

UNION

SELECT INSPECT_TIME1 AS TESTTIME,STANDBY_PLANE AS JIHAO,'4' AS TYPE,FP_ID,REF_ID FROM S_FLIGHT_PLAN -- 4:备份机试飞时间 -- 试飞时间,试飞机号,试飞类型,飞行任务id,派遣任务id

a) 本视图中使用了TSETTIME,JIHAO,TYPE,FP_ID,REF_ID五个字段,由于每个字段都不是唯一的,所以没有主键

  1. 由于hibernate处理所有数据,基本都是要有主键的,所以在按创建实体类的时候,会有麻烦,有了下边的解决方法.

  2. 新建一个主键类,用几个属性作为联合主键,用@Embeddable注解修饰,将几个属性放入进来,写入get,set方法,并且重写equals()和hashCode()方法.

@Embeddable public class VTestFlightKey implements Serializable { private static final long serialVersionUID = 1L;private Date TESTTIME;/**JIHAO 机号 / private String JIHAO; /*TYPE */ private String TYPE; /*FP_ID 飞行计划id */private String FP_ID;private String REF_ID;public String getREF_ID() {        return REF_ID;}public void setREF_ID(String rEF_ID) {        REF_ID = rEF_ID;}public String getFpid() {        return FP_ID;}public void setFpid(String fpid) {        this.FP_ID = fpid;}public Date getTestTime(){        return TESTTIME;}public void setTestTime(Date testTime){        this.TESTTIME=testTime;}public String getJihao(){   return JIHAO;}       public void setJihao(String jihao){        this.JIHAO=jihao;}public String getType(){        return TYPE;}public void setType(String type){        this.TYPE=type;}@Override  public int hashCode() {    return this.TESTTIME.hashCode();}@Overridepublic boolean equals(Object o) {  if(o instanceof VTestFlightKey){     VTestFlightKey key = (VTestFlightKey)o ;     if(this.TESTTIME.equals(key.getTestTime()) && this.JIHAO.equals(key.getJihao()) &&       this.TYPE.equals(key.getType()) && this.FP_ID.equals(key.getFpid()) &&       this.REF_ID.equals(key.getREF_ID())){        return true ;    }  }  return false ; }}

将主键类,作为主类的ID属性,并用@Id注解修饰,且主键类中已经用来做联合主键的属性,不再写在主类中,

@Entity @Table(name="V_TEST_FLIGHT") public class VTestFlight{     private static final long serialVersionUID = 1L; //由于所有字段用用来做联合主键,所以字段都在主键类VTestFlightKey     @Id     private VTestFlightKey vTestFlightKey;     public VTestFlightKey getvTestFlightKey() {             return vTestFlightKey;     }    public void setvTestFlightKey(VTestFlightKey vTestFlightKey) {         this.vTestFlightKey = vTestFlightKey;     }}

到此,关于"怎么用Hibernate处理没有主键的视图"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0