![2012HQL超级最新收集大全套书_第1页](http://file4.renrendoc.com/view/ea90d39e73c48e1d9fb5c21b6eb2533c/ea90d39e73c48e1d9fb5c21b6eb2533c1.gif)
![2012HQL超级最新收集大全套书_第2页](http://file4.renrendoc.com/view/ea90d39e73c48e1d9fb5c21b6eb2533c/ea90d39e73c48e1d9fb5c21b6eb2533c2.gif)
![2012HQL超级最新收集大全套书_第3页](http://file4.renrendoc.com/view/ea90d39e73c48e1d9fb5c21b6eb2533c/ea90d39e73c48e1d9fb5c21b6eb2533c3.gif)
![2012HQL超级最新收集大全套书_第4页](http://file4.renrendoc.com/view/ea90d39e73c48e1d9fb5c21b6eb2533c/ea90d39e73c48e1d9fb5c21b6eb2533c4.gif)
![2012HQL超级最新收集大全套书_第5页](http://file4.renrendoc.com/view/ea90d39e73c48e1d9fb5c21b6eb2533c/ea90d39e73c48e1d9fb5c21b6eb2533c5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、10/10ibernateHQ大全aa() Hibrnae配备了一种非常强大的查询语言,这种语言看上去很像QL。但是不要被语法结构上的相似所迷惑,HL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念.第 1 章 HQL: iberate查询语言Hbene配备了一种非常强大的查询语言,这种语言看上去很像SQ。但是不要被语法结构上的相似所迷惑,HQ是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念.5.大小写敏感性问题除了Jaa类与属性的名称外,查询语句对大小写并不敏感。 所以 SeLeCT与 sELEt 以及 SELECT 是相同
2、的,但是 org。hibrnate.eg。F 并不等价于 org.hibernat.e。Fo 并且 foo。barSet 也不等价于 fo。BRSET.本手册中的H关键字将使用小写字母。 很多用户发现使用完全大写的关键字会使查询语句 的可读性更强, 但我们发现,当把查询语句嵌入到va语句中的时候使用大写关键字比较难看。15。 from子句Hiernt中最简单的查询语句的形式如下:frot该子句简单的返回eg。Cat类的所有实例. 通常我们不需要使用类的全限定名, 因为 ato-mpt(自动引入)是缺省的情况。所以我们几乎只使用如下的简单写法:froCat大多数情况下,你需要指定一个别名, 原因
3、是你可能需要 在查询语句的其它部分引用到af Cat s cat这个语句把别名at指定给类Ct 的实例, 这样我们就可以在随后的查询中使用此别名了。 关键字a是可选的,我们也可以这样写:frm C at子句中可以同时出现多个类, 其查询结果是产生一个笛卡儿积或产生跨表的连接。fom orla, Paaterfrom Fomula as form, Paramete as param查询语句中别名的开头部分小写被认为是实践中的好习惯, 这样做与ava变量的命名标准保持了一致 (比如,domesCt).15. 关联(Asociation)与连接(oin)我们也可以为相关联的实体甚至是对一个集合中的
4、全部元素指定一个别名, 这时要使用关键字jin.fr Cat s cat inne ji cat。mate matelet outerjoin ct。kittes asittenfromCat cat ef in at。mat。kites a kttensfro mula for full joinfom.aramer prm受支持的连接类型是从NSISQL中借鉴来的。 innrjin(内连接) eft utr jo(左外连接)* righouter (右外连接) *fll oi (全连接,并不常用)语句inner jon, ft outer joi 以及rght outr jon 可以简写。
5、fom Ctascatoin cat。matamelef ont.kitns skittn还有,一个”fetc”连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的外联接与延迟声明(la dcrations)。 查看第 20.1 节 “ 抓取策略(etching strategies) 以获得等多的信息.fm t as ca nn oi ech cat.ate lf jin fchct。kitten一个etch连接通常不需要被指定别名,因为相关联的对象不应当被用在 he
6、e 子句 (或其它任何子句)中。同时,相关联的对象并不在查询的结果中直接返回,但可以通过他们的父对象来访问到他们.注意fetch构造变量在使用了scoll()或 itae()函数 的查询中是不能使用的.最后注意,使用ful jn feth 与 rht jon eh是没有意义的。如果你使用属性级别的延迟获取(azyfechin)(这是通过重新编写字节码实现的),可以使用 fetch all popertes来强制Hbernate立即取得那些原本需要延迟加载的属性(在第一个查询中)。fromDocmet fet al poertie orebynefrmocuentoftch l operties
7、 wher lwe)ike ats%15。4。let子句eet 子句选择将哪些对象与属性返 回到查询结果集中 考虑如下情况:seect mtfromCata cat innerjoin cat。e as ate该语句将选择ts o oter Cts。(其他猫的配偶) 实际上, 你可以更简洁的用以下的查询语句表达相同的含义:etca。mat fromCt cat查询语句可以返回值为任何类型的属性,包括返回类型为某种组件(omponn)的属性:sec rm DoesiCt catwhr lik riele.fistNa from Cusoe as cust查询语句可以返回多个对象和(或)属性,存放
8、在 Ojc队列中,sletmother, osp,rm DoesticCat as moher inner jin moh.mt as mat let oter oi mther。ktes as ofsp或存放在一个List对象中,eect new lis(mtr,os, )from DomticCaasmther ine jn mth.mate as mate left oter joi mother。kttenas offs也可能直接返回一个实际的类型安全的ava对象,eec ew amily(moer, mae, offspr)from DomsicCat a mtherjoin mot
9、erma s mate lef joi moter。itn soffspr假设类aml有一个合适的构造函数.你可以使用关键字a给“被选择了的表达式”指派别名:selet max(boyeight) a max, n(bodyeiht) as min,coun(*) as nromCat ca这种做法在与子句slet ne mp一起使用时最有用:selt ew mp( (bodWeiht) as max, m(boyeih)sin,coun(*) as n )fro Ca cat该查询返回了一个p的对象,内容是别名与被选择的值组成的名值映射。15。聚集函数HL查询甚至可以返回作用于属性之上的聚集
10、函数的计算结果:selec avg(catweght), sm(c。wight),max(catweght), unt(a)fomCat cat受支持的聚集函数如下:*av(.),sum(。), mn(。),x(.。.) * ct(*) * cunt(.), cunt(disinc .),cont(l.。)你可以在选择子句中使用数学操作符、连接以及经过验证的SQL函数:selc catwight+ u(iten.wight)from Cat cat jnatkiten ktengrop y atid,cat。wegselect firsame| |intil| uper(stNme) ro e
11、rson关键字distin与all 也可以使用,它们具有与SQL相同的语义。seec isti fr Cat catelet count(disinc), con(ct) fr Cat cat5。6. 多态查询一个如下的查询语句:from Ct as ct不仅返回Ct类的实例,也同时返回子类 DomestcCat的实例。 Hibernat 可以在fom子句中指定任何 Java 类或接口 查询会返回继承了该类的所有持久化子类的实例或返回声明了该接口的所有持久化类的实例.下面的查询语句返回所有的被持久化的对象:frmalang。bec o接口Nme 可能被各种各样的持久化类声明:fm Nmedn,
12、 Name mwhe = mnam注意,最后的两个查询将需要超过一个的LSEECT这表明order y子句 没有对整个结果集进行正确的排序 (这也说明你不能对这样的查询使用Query.crol()方法。)15.7. where子句wre子句允许你将返回的实例列表的范围缩小。 如果没有指定别名,你可以使用属性名来直接引用属性:from Cat wernmFrtz如果指派了别名,需要使用完整的属性名:frm Cat s catwerFr返回名为(属性nam等于)Frit的Cat类的实例。select forom o o,ararwhere oo.satate adat将返回所有满足下面条件的Foo
13、类的实例:存在如下的br的一个实例,其ate属性等于oo的statDate属性。复合路径表达式使得whee子句非常的强大,考虑如下情况:fromCat ctwher not null该查询将被翻译成为一个含有表连接(内连接)的Q查询。如果你打算写像这样的查询语句rom o fo wher foo.rbz。ustomeraddress.ciy is n null在QL中,你为达此目的将需要进行一个四表连接的查询。=运算符不仅可以被用来比较属性的值,也可以用来比较实例:frm Ca cat, Cat ri where cat.mae= rial.atesct cat, matfrom Ca cat
14、, atmatewhere ctat mte特殊属性(小写)id可以用来表示一个对象的唯一的标识符。(你也可以使用该对象的属性名。)frm Ct as cawer ct.d = 123frm C a awere c.mate。id =6第二个查询是有效的.此时不需要进行表连接!同样也可以使用复合标识符.比如Person类有一个复合标识符,它由cnry属性与mdicaNuber属性组成.rm bank.Pron ersneeersni。country = AU nd erso。d。medicarumer 1235from bankAccou accountwher acount。w.id。cun
15、y = Aandaccount.ownd.mediareNm=24第二个查询也不需要进行表连接。同样的,特殊属性ls在进行多态持久化的情况下被用来存取一个实例的鉴别值(dirminator lue)。一个嵌入到er子句中的Java类的名字将被转换为该类的鉴别值。fom Cat t where ca。lass = DomesticCt你也可以声明一个属性的类型是组件或者复合用户类型(以及由组件构成的组件等等).永远不要尝试使用以组件类型来结尾的路径表达式(pathexrsion)(与此相反,你应当使用组件的一个属性来结尾)。 举例来说,如果stre。owner含有一个包含了组件的实体addres
16、ssor.wer.ddesscity/正确tor。or.adess 错误!一个“任意类型有两个特殊的属性id和clas, 来允许我们按照下面的方式表达一个连接(AudiL.item 是一个属性,该属性被映射为)。from udiLoglog,ayment payetwhere l。iem。class = Payment an logitem。i = pymen。i注意,在上面的查询与句中,log.itmcass 和 paymnt.cass将涉及到完全不同的数据库中的列.158 表达式在hee子句中允许使用的表达式包括 大多数你可以在L使用的表达式种类: 数学运算符+,, *, /二进制比较运算
17、符=, ,=,,!=, li*逻辑运算符and,r,not in,not in, btwee,i null,is no nul, is empt,is n emt, ber of and membr f ”简单的” a, cse 。 whn 。. ten。. lse.。 en,和 ”搜索” case, case whe .。 the 。.。 ls 。. n *字符串连接符。.。|。. or oct(。,.) *currnt_dte(), curet_tme(),curen_tmetamp() *secon(。.), mite(。.),hur(。.), y(。), oh(。.), yar(。),
18、 EBQL 3.0定义的任何函数或操作:substrig(),tm(), lowe(), upper(), length(),loa(), bs(), s(), it_length()coalesce() 和 nlli() ast(。 as。), 其第二个参数是某Hiberat类型的名字,以及extract(. from .),只要ANSI cst()和 extrct() 被底层数据库支持*何数据库支持的SQ标量函数,比如sign(), ruc(), rtrim(), in() DBC参数传入? 命名参数:nam, :st_date, :x1*SQL 直接常量 fo, 69, 1970-011
19、 1:0:0. Jvbic sttic ial 类型的常量 eg。oor。TABY关键字i与betwen可按如下方法使用:from DosticCat ct her etween d Brm DmsicCat ct w in( o,Bar, Bz )而且否定的格式也可以如下书写:ro Doesticat cat her nt beteenA d fom DoesicCt c whr not i ( Foo, Bar, Bz )同样, 子句isull与snotul可以被用来测试空值(ul).在Hbente配置文件中声明QL“查询替代(qer ubstiuions)之后,布尔表达式(Boolean
20、)可以在其他表达式中轻松的使用:tre ,fase 100fromOrdr rd where mnelemt(rer.iems) 10000在传递一个集合的索引集或者是元素集(ments与indices 函数)或者传递一个子查询的结果的时候,可以使用SL函数ny, soe,al, eiss, insele othefrm t as mother, at askitwre kt in elments(foo.kien)slect rom NameLit lit, Persoper =somlements)from Cat cat her eists element(ct.kittens)from
21、 lae were3 all lemet(.soe)fom Showsowerefizard i indice(shw。acs)注意,在Hiert3种,这些结构变量- se,emet, indies, minindex, maxndex, inlme,maxeement 只能在where子句中使用.一个被索引过的(有序的)集合的元素(arays, lists, ma)可以在其他索引中被引用(只能在ere子句中):from rerorder where ode.items0。d =1234seleteron frm esoperon, Calenar caendrwheecaend.holias
22、national a= person。bihay alendar= caedasect item foItitem,Oder odwhee orderiemsorer。livereItmInies0 =item adore。id =11elect te fom Iteitem, rdeoderhre rer。temsmindex(orderites) =im and orded =11在中的表达式甚至可以是一个算数表达式。slct em froItitem, rdr orderwere orer。tems size(order.ims) -1 = iem对于一个一对多的关联(ne-o-many
23、 asociatin)或是值的集合中的元素,QL也提供内建的ine()函数,eletim, ne(item)rom Oer orderjoi ordr。tems itmwhereide(tem) 5如果底层数据库支持标量的SQL函数,它们也可以被使用frm DomestcCact heruppe) ik FRI%如果你还不能对所有的这些深信不疑,想想下面的查询.如果使用SQ,语句长度会增长多少,可读性会下降多少:seletcustfrm Prout pro, t stor nner join stoeustomers cstwher idtan n ( Mebourne, Syne) d pr
24、od all eements(cust.currenrder。linems)提示: 会像如下的语句SL,cus.addrs, u。one, custid,cut。urrent_orderOM customescu, sores sto, loations loc, tore_cumes s,rodct podWHER = widgetAD sore。locd = lc.d A IN ( lbourne, yey) ANsc。stoe_d=storedA sc.cst_id = cst.id AD prod。 = LL(SELEC d_ ROM liitms te,ordes oW
25、HERE itemrd_id = o.id AND cstcurtrder = oid )15.9. order y子句查询返回的列表(list)可以按照一个返回的类或组件(compes)中的任何属性(popery)进行排序:from DometicCatcatodr bas, ca。eght desc,tbrhdate可选的asc或es关键字指明了按照升序或降序进行排序1510. gropby子句一个返回聚集值(aggregatevaues)的查询可以按照一个返回的类或组件(copnets)中的任何属性(operty)进行分组:seec cat.colo, um(aeiht), cont(c
26、t)fom Ca catgru by ct。colorselect fo.id, av(nme), max(na)frm Foo foojis nmegrupby foo.ihavn子句在这里也允许使用.elec cat.coor,m(caweight), ont(ct)fo Cat atgopby ca。colorhving ct。clor in (e.ColoABY, egolr.BLACK)如果底层的数据库支持的话(例如不能在SQL中使用),SQL的一般函数与聚集函数也可以出现 在avng与r by 子句中。slect cato Cat catjoncat。ktten kittenrou
27、 b cahavigav(kitten。weiht) 100e b nt(ien) sc, (kttn.weiht) desc注意gop by子句与 rder by子句中都不能包含算术表达式(armetic expesons).1。子查询对于支持子查询的数据库,Hibenae支持在查询中使用子查询。一个子查询必须被圆括号包围起来(经常是SQL聚集函数的圆括号)。甚至相互关联的子查询(引用到外部查询中的别名的子查询)也是允许的.ro Cat afatcatwer fatcat。weigh(slec ag(cat.weig) fro DomesicCatat)fo DesticCt ascater
28、 = ome ( selectame。nckNae rom ame asnae)fromt as catwhere oteists (f t a mte whre mte.mae =ca)rom mestiC as catwhe ( elct nm.nickme from Nam asnam)在set列表中包含一个表达式以上的子查询,你可以使用一个元组构造符(te conrutors):fro C s awher ot ( , cat。coor ) in (selec, at。olorfrm osCat c)注意在某些数据库中(不包括Oracle与HSL),你也可以在其他语境中使用元组构造符,
29、 比如查询用户类型的组件与组合:rm Persn wer name =(Gavn, A, ig)该查询等价于更复杂的:fom Pon her e。first = Gavin and nameintial=A and name。at =Kng)有两个很好的理由使你不应当作这样的事情:首先,它不完全适用于各个数据库平台;其次,查询现在依赖于映射文件中属性的顺序。1。1。HQL示例bernate查询可以非常的强大与复杂。实际上,Hibente的一个主要卖点就是查询语句的威力。这里有一些例子,它们与我在最近的一个项目中使用的查询非常相似.注意你能用到的大多数查询比这些要简单的多!下面的查询对于某个特定
30、的客户的所有未支付的账单,在给定给最小总价值的情况下,返回订单的id,条目的数量和总价值,返回值按照总价值的结果进行排序。为了决定价格,查询使用了当前目录。作为转换结果的SQL查询,使用了ODER, RDE_LI, PRODUT, CATALOG 和PRIE 库表.seet red,sum(pice.amount),cut(tem)fro Ode as ore oin ordelnItems stemoin iteprdut sprduct, Catalog as atog joncatlogprice asprcewhere ordr。paid ale an er = :cust
31、o and rceprodut = prouct tog。effetiDate sysdate and ctageciveDe = all ( seleccafectiveae from atlo aat where atfctiveDt sysdate )group by erhvig um(prceaont) :minAmoutorderbsum(prie。amont) des这简直是一个怪物!实际上,在现实生活中,我并不热衷于子查询,所以我的查询语句看起来更像这个:select rerd, s(pice。aunt), coun(tem)from Ore as orde jin ore。l
32、ineItems as tem join duc asprduct, Catalgas caaog onctaogprices asriehre ord.pa = als an orr.cusomer = :customr duc = prdct andctalog = :cuCtloggrou b oderav um(pice。amount) :inAmotorde by sm(priceamot) des下面一个查询计算每一种状态下的支付的数目,除去所有处于AWAIT_APRVA状态的支付,因为在该状态下当前的用户作出了状态的最新改变。该查询被转换成含有两个内连
33、接以及一个相关联的子选择的SQL查询,该查询使用了表PAYMENT, AYET_STTUS以及 PYMT_STATUS_CHANGE。seleccout(pet), from Payment s paymentin pyentcurretStats sttus jonpayensauChangs statsChaewhe PamntSttusWITING_PPROAL r ( tashge.timeSt ( select ma(change。timeStamp) rom PayenStusCae change where changpaymnt = paymnt ) ne :crsr )gou
34、p, tatussOrerodr by stus。strder如果我把statusChanges实例集映射为一个列表(lt)而不是一个集合(), 书写查询语句将更加简单。seet coun(paent), frmPaymnt as paymtjin yentcuentStatus as stauswhe ayntttus。WAITING_APOVA or paymet.stasCange maxdex(pyment.stausChnges) .ur :currentUsergrup b, status.sortrerrdeby stus。sOrer下面一个查询使用了MS SQL Sev的 is
35、Nll()函数用以返回当前用户所属组织的组织帐号及组织未支付的账.它被转换成一个对表ACUNT,PAMET, PYMT_SAUS, ACOUNT_TPE, OGANIZATIO 以及 _SR进行的三个内连接, 一个外连接和一个子选择的SL查询.sec acount,paymenfrm At s ccount eft er join acou。aent as paymentere :crretUsr in eter)and PaymentStausUPAID Nul, Paymentttus.UNAI)rer by acount.type.orOrder,accont。accoNumber, paymen。ueDte对于一些数据库,我们需要弃用(相关的)子选择。ect acount,aymenfo Acut asaccount jers a uselet ouerjoin acout。payent as paymentwhere :curetsr = user an PaymenStuUPAI = isNl, PaymentSttu.UNPAD)de baccout.type.otOde, account.countNumbr, ay
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度三人合伙设立医疗设备销售公司的合作协议2篇
- 二零二五年度消防清包工合同范本:消防设施维修与技术支持3篇
- 二零二五年度葡萄酒年份酒拍卖会合作合同4篇
- 二零二五年度新能源汽车充电站土地租赁协议
- 二零二五年度中企动力南京分公司劳务派遣合作协议
- 二零二五年度梅安与王莉的离婚财产分割协议子女抚养及赡养
- 二零二五年度离婚协议书简本:婚内协议修改2篇
- 二零二五年度股东借款给企业专项合作协议
- 二零二五年度航空航天产业劳动合同范本
- 二零二五年度环保项目投资顾问聘用合同范本4篇
- 电力沟施工组织设计-电缆沟
- 《法律援助》课件
- 小儿肺炎治疗与护理
- 《高处作业安全》课件
- 春节后收心安全培训
- 小学教师法制培训课件
- 电梯操作证及电梯维修人员资格(特种作业)考试题及答案
- 市政绿化养护及市政设施养护服务方案(技术方案)
- SLT824-2024 水利工程建设项目文件收集与归档规范
- 锅炉本体安装单位工程验收表格
- 报价单(产品报价单)
评论
0/150
提交评论