【正文】
d = :customerand = productand catalog = :currentCataloggroup by orderhaving sum() :minAmountorder by sum() desc下面一個(gè)查詢(xún)計(jì)算每一種狀態(tài)下的支付的數(shù)目,除去所有處于AWAITING_APPROVAL狀態(tài)的支付,因?yàn)樵谠摖顟B(tài)下 當(dāng)前的用戶作出了狀態(tài)的最新改變。該查詢(xún)被轉(zhuǎn)換成含有兩個(gè)內(nèi)連接以及一個(gè)相關(guān)聯(lián)的子選擇的SQL查詢(xún),該查詢(xún)使用了表PAYMENT,PAYMENT_STATUS以及PAYMENT_STATUS_CHANGE。select count(payment), from Payment as paymentjoin as statusjoin as statusChangewhere or ( = ( select max()from PaymentStatusChange change where = payment)and :currentUser)group by , by 如果我把statusChanges實(shí)例集映射為一個(gè)列表(list)而不是一個(gè)****(set), 書(shū)寫(xiě)查詢(xún)語(yǔ)句將更加簡(jiǎn)單.select count(payment), from Payment as paymentjoin as statuswhere or [ maxIndex() ].user :currentUsergroup by , by 下面一個(gè)查詢(xún)使用了MS SQL Server的isNull()函數(shù)用以返回當(dāng)前用戶所屬****的****帳號(hào)及****未支付的賬。 它被轉(zhuǎn)換成一個(gè)對(duì)表ACCOUNT,PAYMENT,PAYMENT_STATUS,ACCOUNT_TYPE,ORGANIZATION以及ORG_USER進(jìn)行的三個(gè)內(nèi)連接, 一個(gè)外連接和一個(gè)子選擇的SQL查詢(xún)。select account, paymentfrom Account as accountleft outer join as paymentwhere :currentUser in elements() and = isNull(,) order by , , 對(duì)于一些數(shù)據(jù)庫(kù),我們需要棄用(相關(guān)的)子選擇。select account, paymentfrom Account as accountjoin as userleft outer join as paymentwhere :currentUser = userand = isNull(, )order by , , 13. 批量的Update amp。 Delete語(yǔ)句HQL現(xiàn)在支持Update與Delete語(yǔ)句. 查閱第 節(jié) “大批量更新/刪除(Bulk update/delete)”以獲得更多信息。14. 小技巧 amp。 小竅門(mén)你可以統(tǒng)計(jì)查詢(xún)結(jié)果的數(shù)目而不必實(shí)際的返回他們:( (Integer) (select count(*) from ....).next() ).intValue()若想根據(jù)一個(gè)****的大小來(lái)進(jìn)行排序,可以使用如下的語(yǔ)句:select , User as usrleft join as msggroup by , by count(msg)如果你的數(shù)據(jù)庫(kù)支持子選擇,你可以在你的查詢(xún)的where子句中為選擇的大?。╯election size)指定一個(gè)條件:from User usr where size() = 1如果你的數(shù)據(jù)庫(kù)不支持子選擇語(yǔ)句,使用下面的查詢(xún):select , User join msggroup by , having count(msg) = 1因?yàn)閮?nèi)連接(inner join)的原因,這個(gè)解決方案不能返回含有零個(gè)信息的User類(lèi)的實(shí)例, 所以這種情況下使用下面的格式將是有幫助的:select , User as usrleft join as msggroup by , count(msg) = 0JavaBean的屬性可以被綁定到一個(gè)命名查詢(xún)(named query)的參數(shù)上:Query q = (from foo Foo as foo where =:name and =:size)。(fooBean)。 // fooBean包含方法getName()與getSize()List foos = ()。通過(guò)將接口Query與一個(gè)過(guò)濾器(filter)一起使用,****(Collections)是可以分頁(yè)的:Query q = ( collection, )。 // (PAGE_SIZE)。(PAGE_SIZE * pageNumber)。List page = ()。通過(guò)使用查詢(xún)過(guò)濾器(query filter)可以將****(Collection)的原素分組或排序:Collection orderedCollection = ( collection, order by )。Collection counts = ( collection, select , count(this) group by )。不用通過(guò)初始化,你就可以知道一個(gè)****(Collection)的大?。? (Integer) (select count(*) from ....).next() ).intValue()