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

提交评论