怎么用Hibernate处理没有主键的视图
更新:HHH   时间:2023-1-7


这篇文章主要介绍“怎么用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();
}

@Override
public 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处理没有主键的视图”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注天达云网站,小编会继续努力为大家带来更多实用的文章!

返回大数据教程...