这篇文章主要介绍“怎么用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处理没有主键的视图”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4144428/blog/3106051