這篇文章主要介紹“怎么用Hibernate處理沒(méi)有主鍵的視圖”,在日常操作中,相信很多人在怎么用Hibernate處理沒(méi)有主鍵的視圖問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么用Hibernate處理沒(méi)有主鍵的視圖”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)自2013年創(chuàng)立以來(lái),先為翔安等服務(wù)建站,翔安等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為翔安企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
視圖的詳情
SELECT TEST_FLIGHT_TIME AS TESTTIME,JIHAO AS JIHAO,'1' AS TYPE,FP_ID,REF_ID FROM S_FLIGHT_PLAN -- 1:主機(jī)檢查時(shí)間
UNION
SELECT INSPECT_TIME AS TESTTIME,JIHAO AS JIHAO,'2' AS TYPE,FP_ID,REF_ID FROM S_FLIGHT_PLAN -- 2:主機(jī)試飛時(shí)間
UNION
SELECT TEST_FLIGHT_TIME1 AS TESTTIME,STANDBY_PLANE AS JIHAO,'3' AS TYPE,FP_ID,REF_ID FROM S_FLIGHT_PLAN -- 3:備份機(jī)檢查時(shí)間
UNION
SELECT INSPECT_TIME1 AS TESTTIME,STANDBY_PLANE AS JIHAO,'4' AS TYPE,FP_ID,REF_ID FROM S_FLIGHT_PLAN -- 4:備份機(jī)試飛時(shí)間 -- 試飛時(shí)間,試飛機(jī)號(hào),試飛類(lèi)型,飛行任務(wù)id,派遣任務(wù)id
a) 本視圖中使用了TSETTIME,JIHAO,TYPE,FP_ID,REF_ID五個(gè)字段,由于每個(gè)字段都不是唯一的,所以沒(méi)有主鍵
由于hibernate處理所有數(shù)據(jù),基本都是要有主鍵的,所以在按創(chuàng)建實(shí)體類(lèi)的時(shí)候,會(huì)有麻煩,有了下邊的解決方法.
新建一個(gè)主鍵類(lèi),用幾個(gè)屬性作為聯(lián)合主鍵,用@Embeddable注解修飾,將幾個(gè)屬性放入進(jìn)來(lái),寫(xiě)入get,set方法,并且重寫(xiě)equals()和hashCode()方法.
@Embeddable public class VTestFlightKey implements Serializable { private static final long serialVersionUID = 1L; private Date TESTTIME; /** JIHAO 機(jī)號(hào) / private String JIHAO; /* TYPE */ private String TYPE; /* FP_ID 飛行計(jì)劃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 ; } }
將主鍵類(lèi),作為主類(lèi)的ID屬性,并用@Id注解修飾,且主鍵類(lèi)中已經(jīng)用來(lái)做聯(lián)合主鍵的屬性,不再寫(xiě)在主類(lèi)中,
@Entity @Table(name="V_TEST_FLIGHT") public class VTestFlight{ private static final long serialVersionUID = 1L; //由于所有字段用用來(lái)做聯(lián)合主鍵,所以字段都在主鍵類(lèi)VTestFlightKey @Id private VTestFlightKey vTestFlightKey; public VTestFlightKey getvTestFlightKey() { return vTestFlightKey; } public void setvTestFlightKey(VTestFlightKey vTestFlightKey) { this.vTestFlightKey = vTestFlightKey; } }
到此,關(guān)于“怎么用Hibernate處理沒(méi)有主鍵的視圖”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!