hibernate使用from (select ……)子查詢的方法_第1頁
hibernate使用from (select ……)子查詢的方法_第2頁
hibernate使用from (select ……)子查詢的方法_第3頁
hibernate使用from (select ……)子查詢的方法_第4頁
hibernate使用from (select ……)子查詢的方法_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、6/6今天徒弟用到了一句復雜的查詢語句。.結果執行報錯,但是在SL中執行沒有問題,于是來求助我了.。語句的HL/SQL格式如下:selectoun(1) ,xltype,sm(zse),sum(prson)rom (electxlcxltype,.ieron,(select sum(y。dzsj) from Yslist as y were cyki = greg) adzsje fro Greg a g,Xl a xl e gxluid = xl.uud ) as t where roupy tcxltyp結果執行出錯,最終發現,HL無法支持fm后面跟子查詢的方式,網上查了N多資料,發現遇到

2、這個問題的人還真是不少,但每一個相關的問題帖都沒有滿意的答復,甚至于多數都是沒有跟帖的。.。一陣心寒,hibrn叱咤風云,竟然對這個支持如此之弱?雖然這個語句可以通過另外的方法來做(比如建視圖或者直接使用SL來做),但總是不甘心,于是又開始查閱各處資料,最后找到了思路,覺得既然HL不支持,那么只能把這種子查詢封裝為對象來做了,那么肯定是需要hm配置這種臨時的子查詢對象的,于是開始著手hbm配置的資料中查,h中配置對象的都是lass標簽,開始把范圍縮小,針對m的clas標簽的屬性資料開始翻查,找到了幾個比較可能的屬性,where、seet、mutable、ntiy-bean,貌似這些都可能跟臨時

3、對象有關。于是反復嘗試,并繼續翻查資料最終在Hibrnate refence 3.。ga 正式版中文參考手冊中找到了一些比較可靠的資料:5。1。3.cass你可以使用class元素來定義一個持久化類: lass ame=Classame table”tablme” simnatovale=”dsciminatr_alue mutabl=rufalse scema=owner” ctlogcatalo” roy=”ProxyInteface ynaicupdtetrue|flse ynamc-iser=”truefale lectbefreupdae”trefalse polmopism”imp

4、liit|explit wher=”aitarysql whee co esister=”ersiserlass btcsizeN optimistcock=non|esondirtyall ay=”re|fale entityam=tityName” check=”rbitrary sl hek cnitin” rowid=”owid” subselct=SQL exprssion bstrt=trealse node=mentnme/nm (可選): 持久化類(或者接口)的Jv全限定名。 如果這個屬性不存在,ibrnt將假定這是一個非POJ的實體映射。 tle (可選 默認是類的非全限定名

5、): 對應的數據庫表名。 disciinatr-ale (可選 默認和類名一樣): 一個用于區分不同的子類的值,在多態行為時使用。它可以接受的值包括ull 和 o nul. uab (可選,默認值為tue): 表明該類的實例是可變的或者不可變的。 schem(可選): 覆蓋在根hibrnat-mppng元素中指定的schema名字。 caag (可選): 覆蓋在根hibernate-mappig元素中指定的ctalog名字. prox (可選): 指定一個接口,在延遲裝載時作為代理使用. 你可以在這里使用該類自己的名字.dynic-pdae (可選,默認為false):指定用于DATE 的SQ

6、L將會在運行時動態生成,并且只更新那些改變過的字段。dynamiinsert(可選, 默認為 false): 指定用于SERT的 SQL 將會在運行時動態生成,并且只包含那些非空值字段。 selctbeoeudae(可選, 默認為 false): 指定Hiberne除非確定對象真正被修改了(如果該值為tru譯注),否則不會執行SUDA操作.在特定場合(實際上,它只在一個瞬時對象(tanin oct)關聯到一個 新的essi中時執行的updae()中生效),這說明Hiberna會在UPAT 之前執行一次額外的SSELC操作,來決定是否應該執行 UPDE. polymorphism(多態) (可選

7、, 默認值為implic (隱式) ): 界定是隱式還是顯式的使用多態查詢(這只在Hibenate的具體表繼承策略中用到譯注)。 were(可選) 指定一個附加的SQLWHERE 條件, 在抓取這個類的對象時會一直增加這個條件. pesistr (可選): 指定一個定制的Clsersster。 batchze (可選,默認是) 指定一個用于 根據標識符(identifir)抓取實例時使用的atch sze(批次抓取數量). ptimisticock(樂觀鎖定) (可選,默認是versio): 決定樂觀鎖定的策略。 (6)lazy (可選): 通過設置laz=fals, 所有的延遲加載(Lzy

8、feting)功能將被全部禁用(dibled). (7)entity-nae(可選,默認為類名):Hibt3允許一個類進行多次映射( 前提是映射到不同的表),并且允許使用Maps或X代替Jva層次的實體映射 (也就是實現動態領域模型,不用寫持久化類譯注)。 更多信息請看第 44 節“動態模型(Damc models)”a 第 18章XL映射。 (18)cck (可選): 這是一個L表達式, 用于為自動生成的shema添加多行(multi-row)約束檢查. ()roi (可選): ibernate可以使用數據庫支持的所謂的RODs,例如: Oracle數據庫,如果你設置這個可選的rowid,

9、ierate可以使用額外的字段rwd實現快速更新。RWID是這個功能實現的重點, 它代表了一個存儲元組(upe)的物理位置。 (20)sbselect(可選): 它將一個不可變(mutable)并且只讀的實體映射到一個數據庫的子查詢中.當你想用視圖代替一張基本表的時候,這是有用的,但最好不要這樣做。更多的介紹請看下面內容. (21)abtact (可選): 用于在ionsubcls的繼承結構 (hieaies)中標識抽象超類.注意其中紅色的字體,這就是關鍵之處,往下我找到了相關的內容:對Hibernae映射來說視圖和表是沒有區別的,這是因為它們在數據層都是透明的(注意:一些數據庫不支持視圖屬性

10、,特別是更新的時候).有時你想使用視圖,但卻不能在數據庫 中創建它(例如:在遺留的schema中)。這樣的話,你可以映射一個不可變的(imtable)并且是 只讀的實體到一個給定的SQL子查詢表達式: subslet sele, ma(bi.aount), count(*) ro te joinb on bi。item_i= item。id group b id nmnam/ 。定義這個實體用到的表為同步(sychronze),確保自動刷新(uto-flush)正確執行,并且依賴原實體的查詢不會返回過期數據。uect在屬性元素 和一個嵌套映射元素中都可見。 顯然這就是我一直在找的東東了,ibr

11、ate支持自身建立視圖,而不需要依賴于數據庫。雖然它本身的說法這是用來替代視圖的,但其實這就是帶子查詢的sql,看我們最終的配置結果。臨時子查詢視圖Bean其中第二個非默認的構造函數是不能少的,不然對象無法創建:Java代碼 publiclassTestean priate Inger id; private ring cltype; riveInteger person; piat Dldzse; publc sea() puli Tsten(Strig cxltpe,Integer pern, Doule dzsje) sur(); this。cxtpe cxye; this.ipeon

12、iprso; thsdsj sje; pcStriggeCxype() eun cxlte; uic v stCxltype(Sring cltye) this。xltype = cxlty; public Iteer getIperson() retu ierson; publicvoid etIprson(Integerperon) thi.person iperson; pulDubl etDzsj() turn dsj; uicvodstDze(oubl dzse) isdzsje dsje; pbicItgetd() returnd; public videtI(Ite) ths.i

13、d ; TtBen的配置:Xm代碼 hbeatema class name=TsBn muabefalse subseec seect xl。tp,g.iprson,(see sm(y。dzsje) rm Yklist as hery.cykpid= g.cren) as dzjefro Guestre as g,X as xwere g.xluud =uuid synchoni table=Guestreg idame=”id” type=itgr” coln name=id / gneratorclass=”inti / /idprptyname=”xlty typ=”strig” col

14、m nae=”perso/oln/propetyppertnmdse typ=ouble /class /iberae-mapin QL語句:selectt。xltype,sum(.zsj),sum(。iperson) rm sten t where grop by t.cxlypeirae生成的Q語句:Herat:se testbean0_.lty a col_0_,s(tetben0_。dzsje) a cl_1_0_, u(etbean0_。person) as col_0_ from ( seetxl。y,g.ipeson,(slctsum(ydzje) fo Ysklist as werey.cypd = g。cregno) adzsje romuestrg s ,l as xlwhrg。xlu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論