怎么用Hibernate处理没有主键的视图
这篇文章主要介绍"怎么用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();}@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处理没有主键的视图"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!