这篇文章主要介绍“怎么用Hibernate处理没有主键的视图”,在日常操作中,相信很多人在怎么用Hibernate处理没有主键的视图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Hibernate处理没有主键的视图”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
视图的详情
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五个字段,由于每个字段都不是唯一的,所以没有主键
由于hibernate处理所有数据,基本都是要有主键的,所以在按创建实体类的时候,会有麻烦,有了下边的解决方法.
新建一个主键类,用几个属性作为联合主键,用@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处理没有主键的视图”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注天达云网站,小编会继续努力为大家带来更多实用的文章!