??xml version="1.0" encoding="utf-8" standalone="yes"?>99视频在线观看地址,欧美一区二区三区不卡,天堂精品中文字幕在线http://www.aygfsteel.com/shiwenfeng/category/42360.html在不断模ѝ思考、ȝ中一步一步进步!zh-cnSun, 24 Jan 2010 07:54:30 GMTSun, 24 Jan 2010 07:54:30 GMT60HQL动态查?/title><link>http://www.aygfsteel.com/shiwenfeng/archive/2010/01/24/310638.html</link><dc:creator>shiwf</dc:creator><author>shiwf</author><pubDate>Sun, 24 Jan 2010 05:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/shiwenfeng/archive/2010/01/24/310638.html</guid><wfw:comment>http://www.aygfsteel.com/shiwenfeng/comments/310638.html</wfw:comment><comments>http://www.aygfsteel.com/shiwenfeng/archive/2010/01/24/310638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/shiwenfeng/comments/commentRss/310638.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/shiwenfeng/services/trackbacks/310638.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt"><span style="color: red"><span style="font-size: 12pt"><span style="color: red">h看此blog: </span><a >http://conkeyn.javaeye.com/category/35770</a> </span></span></span><span style="font-size: 10pt"><br /> <br /> </span> <p><span style="font-size: small"><span style="font-size: 10pt"><span style="font-weight: bold; font-size: 21px; line-height: 31px">HQL: Hibernate查询语言</span> </span></span></p> <p><span style="font-size: 10pt"><span style="font-size: small">Hibernate配备了一U非常强大的查询语言Q这U语a看上d像SQL。但是不要被语法l构上的怼所qhQHQL是非常有意识的被设计为完全面向对象的查询Q它可以理解如ѝ多?和关联之cȝ概念?/span> </span></p> <div lang="zh-cn" xml:lang="zh-cn"> <div> <div> <div> <h2 style="clear: both"><span style="font-size: small"><a name="queryhql-casesensitivity"></a><span style="font-size: 10pt">1.大小写敏感性问?/span></span><span style="font-size: 10pt"> </span></h2> </div> </div> </div> <p><span style="font-size: 10pt"><span style="font-size: small">除了JavacM属性的名称外,查询语句对大写q不敏感?所?<tt><span>SeLeCT</span> </tt>?<tt><span>sELEct</span> </tt>以及 <tt><span>SELECT</span> </tt>是相同的Q但?<tt><span>org.hibernate.eg.FOO</span> </tt>q不{h?<tt><span>org.hibernate.eg.Foo</span> </tt>q且 <tt><span>foo.barSet</span> </tt>也不{h?<tt><span>foo.BARSET</span> </tt>?/span> </span></p> <p><span style="font-size: 10pt"><span style="font-size: small">本手册中的HQL关键字将使用写字母. 很多用户发现使用完全大写的关键字会查询语句 的可L更? 但我们发玎ͼ当把查询语句嵌入到Java语句中的时候用大写关键字比较隄?/span> </span></p> </div> <div lang="zh-cn" xml:lang="zh-cn"> <div> <div> <div> <h2 style="clear: both"><span style="font-size: small"><a name="queryhql-from"></a><span style="font-size: 10pt">2.from子句</span></span><span style="font-size: 10pt"> </span></h2> </div> </div> </div> <p><span style="font-size: 10pt"><span style="font-size: small">Hibernate中最单的查询语句的Ş式如下:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from eg.Cat </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">该子句简单的q回<tt><span>eg.Cat</span> </tt>cȝ所有实例。通常我们不需要用类的全限定? 因ؓ <tt><span>auto-import</span> </tt>Q自动引入) 是缺省的情况。所以我们几乎只使用如下的简单写法:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat </span> </span></pre> <p><span style="font-size: small"><span style="font-size: 10pt">大多数情况下, 你需要指定一?span><em>别名</em> </span>, 原因是你可能需?在查询语句的其它部分引用?tt><span>Cat</span> </tt></span></span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat as cat </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">q个语句把别?tt><span>cat</span> </tt>指定l类<tt><span>Cat</span> </tt>的实? q样我们可以在随后的查询中使用此别名了。关键字<tt><span>as</span> </tt>是可选的Q我们也可以q样?</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat cat </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">子句中可以同时出现多个类, 其查询结果是产生一个笛卡儿U或产生跨表的连接?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Formula, Parameter </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from Formula as form, Parameter as param </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">查询语句中别名的开头部分小写被认ؓ是实践中的好习惯Q?q样做与Java变量的命名标准保持了一?(比如Q?tt><span>domesticCat</span> </tt>)?/span> </span></p> </div> <div lang="zh-cn" xml:lang="zh-cn"> <div> <div> <div> <h2 style="clear: both"><span style="font-size: small"><a name="queryhql-joins"></a><span style="font-size: 10pt">3.兌(Association)与连?Join)</span></span><span style="font-size: 10pt"> </span></h2> </div> </div> </div> <p><span style="font-size: 10pt"><span style="font-size: small">我们也可以ؓ相关联的实体甚至是对一个集合中的全部元素指定一个别? q时要用关键字<tt><span>join</span> </tt>?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat as cat inner join cat.mate as mate left outer join cat.kittens as kitten </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat as cat left join cat.mate.kittens as kittens </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from Formula form full join form.parameter param </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">受支持的q接cd是从ANSI SQL中借鉴来的?/span> </span></p> <div> <ul type="disc" compact> <li> <p><span style="font-size: 10pt"><span style="font-size: small"><tt><span>inner join</span> </tt>Q内q接Q?/span> </span></p> <li> <p><span style="font-size: 10pt"><span style="font-size: small"><tt><span>left outer join</span> </tt>Q左外连接)</span> </span></p> <li> <p><span style="font-size: 10pt"><span style="font-size: small"><tt><span>right outer join</span> </tt>Q右外连接)</span> </span></p> <li> <p><span style="font-size: 10pt"><span style="font-size: small"><tt><span>full join</span> </tt>(全连接,q不常用)</span> </span></p> </li> </ul> </div> <p><span style="font-size: 10pt"><span style="font-size: small">语句<tt><span>inner join</span> </tt>, <tt><span>left outer join</span> </tt>以及 <tt><span>right outer join</span> </tt>可以写?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat as cat join cat.mate as mate left join cat.kittens as kitten </span> </span></pre> <p><span style="font-size: small"><span style="font-size: 10pt">q有Q一?fetch"q接允许仅仅使用一个选择语句将相关联的对象或一l值的集合随着他们的父对象的初始化而被初始化,q种Ҏ在用到集合的情况下其有用Q对于关联和集合来说Q它有效的代替了映射文g中的外联接与延迟声明Qlazy declarationsQ? 查看 </span><a title="20.1. 抓取{略(Fetching strategies)" ><span style="font-size: 10pt"><span style="color: #336699">W?0.1?“ 抓取{略(Fetching strategies) ”</span> </span></a><span style="font-size: 10pt">以获得等多的信息?/span></span><span style="font-size: 10pt"> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat as cat inner join fetch cat.mate left join fetch cat.kittens </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">一个fetchq接通常不需要被指定别名, 因ؓ相关联的对象不应当被用在 <tt><span>where</span> </tt>子句 (或其它Q何子?中。同Ӟ相关联的对象q不在查询的l果中直接返回,但可以通过他们的父对象来访问到他们?/span> </span></p> <p><span style="font-size: 10pt"><span style="font-size: small">注意<tt><span>fetch</span> </tt>构造变量在使用?tt><span>scroll()</span> </tt>?<tt><span>iterate()</span> </tt>函数的查询中是不能用的。最后注意,使用<tt><span>full join fetch</span> </tt>?<tt><span>right join fetch</span> </tt>是没有意义的?/span> </span></p> <p><span style="font-size: 10pt"><span style="font-size: small">如果你用属性别的延迟获取Qlazy fetchingQ(q是通过重新~写字节码实现的Q,可以使用 <tt><span>fetch all properties</span> </tt></span>来强制Hibernate立即取得那些原本需要gq加载的属性(在第一个查询中Q?/span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Document fetch all properties order by name </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from Document doc fetch all properties where lower(doc.name) like '%cats%' </span> </span></pre> </div> <div lang="zh-cn" xml:lang="zh-cn"> <div> <div> <div> <h2 style="clear: both"><span style="font-size: small"><a name="queryhql-select"></a><span style="font-size: 10pt">4.select子句</span></span><span style="font-size: 10pt"> </span></h2> </div> </div> </div> <p><span style="font-size: 10pt"><span style="font-size: small"><tt><span>select</span> </tt>子句选择哪些对象与属性返回到查询l果集中. 考虑如下情况:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select mate from Cat as cat inner join cat.mate as mate </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">该语句将选择<tt><span>mate</span> </tt>s of other <tt><span>Cat</span> </tt>s。(其他猫的配偶Q?实际? 你可以更z的用以下的查询语句表达相同的含?</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select cat.mate from Cat cat </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">查询语句可以q回gؓMcd的属性,包括q回cd为某U组?Component)的属?</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select cat.name from DomesticCat cat where cat.name like 'fri%' </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">select cust.name.firstName from Customer as cust </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">查询语句可以q回多个对象和(或)属性,存放?<tt><span>Object[]</span> </tt>队列?</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select mother, offspr, mate.name from DomesticCat as mother inner join mother.mate as mate left outer join mother.kittens as offspr </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">或存攑֜一?tt><span>List</span> </tt>对象?</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select new list(mother, offspr, mate.name) from DomesticCat as mother inner join mother.mate as mate left outer join mother.kittens as offspr </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">也可能直接返回一个实际的cd安全的Java对象,</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select new Family(mother, mate, offspr) from DomesticCat as mother join mother.mate as mate left join mother.kittens as offspr </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">假设c?tt><span>Family</span> </tt>有一个合适的构造函?</span> </span></p> <p><span style="font-size: 10pt"><span style="font-size: small">你可以用关键字<tt><span>as</span> </tt>l?#8220;被选择了的表达?#8221;指派别名:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n from Cat cat </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">q种做法在与子句<tt><span>select new map</span> </tt>一起用时最有用:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n ) from Cat cat </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">该查询返回了一?tt><span>Map</span> </tt>的对象,内容是别名与被选择的值组成的?值映?/span> </span></p> </div> <div lang="zh-cn" xml:lang="zh-cn"> <div> <div> <div> <h2 style="clear: both"><span style="font-size: small"><a name="queryhql-aggregation"></a><span style="font-size: 10pt">5.聚集函数</span></span><span style="font-size: 10pt"> </span></h2> </div> </div> </div> <p><span style="font-size: 10pt"><span style="font-size: small">HQL查询甚至可以q回作用于属性之上的聚集函数的计结?</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat) from Cat cat </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">受支持的聚集函数如下Q?/span> </span></p> <div> <ul type="disc" compact> <li> <p><span style="font-size: small"><tt><span style="font-size: 10pt"><span>avg(...), sum(...), min(...), max(...)</span> </span></tt></span></p> <li> <p><span style="font-size: small"><tt><span style="font-size: 10pt"><span>count(*)</span> </span></tt></span></p> <li> <p><span style="font-size: small"><tt><span style="font-size: 10pt"><span>count(...), count(distinct ...), count(all...)</span> </span></tt></span></p> </li> </ul> </div> <p><span style="font-size: 10pt"><span style="font-size: small">你可以在选择子句中用数学操作符、连接以及经q验证的SQL函数Q?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select cat.weight + sum(kitten.weight) from Cat cat join cat.kittens kitten group by cat.id, cat.weight </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">select firstName||' '||initial||' '||upper(lastName) from Person </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">关键?tt><span>distinct</span> </tt>?tt><span>all</span> </tt>也可以用,它们h与SQL相同的语?</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select distinct cat.name from Cat cat select count(distinct cat.name), count(cat) from Cat cat </span> </span></pre> </div> <div lang="zh-cn" xml:lang="zh-cn"> <div> <div> <div> <h2 style="clear: both"><span style="font-size: small"><a name="queryhql-polymorphism"></a><span style="font-size: 10pt">6.多态查?/span></span><span style="font-size: 10pt"> </span></h2> </div> </div> </div> <p><span style="font-size: 10pt"><span style="font-size: small">一个如下的查询语句:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat as cat </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">不仅q回<tt><span>Cat</span> </tt>cȝ实例, 也同时返回子c?<tt><span>DomesticCat</span> </tt>的实? Hibernate 可以?tt><span>from</span> </tt>子句中指?span><em>M</em> </span>Java cL接口. 查询会返回承了该类的所有持久化子类的实例或q回声明了该接口的所有持久化cȝ实例。下面的查询语句q回所有的被持久化的对象:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from java.lang.Object o </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">接口<tt><span>Named</span> </tt>可能被各U各L持久化类声明Q?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Named n, Named m where n.name = m.name </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">注意Q最后的两个查询需要超q一个的SQL <tt><span>SELECT</span> </tt>.q表?tt><span>order by</span> </tt>子句 没有Ҏ个结果集q行正确的排? (q也说明你不能对q样的查询?tt><span>Query.scroll()</span> </tt>Ҏ.)</span> </span></p> </div> <div lang="zh-cn" xml:lang="zh-cn"> <div> <div> <div> <h2 style="clear: both"><span style="font-size: small"><a name="queryhql-where"></a><span style="font-size: 10pt">7.where子句</span></span><span style="font-size: 10pt"> </span></h2> </div> </div> </div> <p><span style="font-size: 10pt"><span style="font-size: small"><tt><span>where</span> </tt>子句允许你将q回的实例列表的范围~小. 如果没有指定别名Q你可以使用属性名来直接引用属?</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat where name='Fritz' </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">如果指派了别名,需要用完整的属性名:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat as cat where cat.name='Fritz' </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">q回名ؓQ属性name{于Q?Fritz'?tt><span>Cat</span> </tt>cȝ实例?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select foo from Foo foo, Bar bar where foo.startDate = bar.date </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">返回所有满下面条件的<tt><span>Foo</span> </tt>cȝ实例Q存在如下的<tt><span>bar</span> </tt>的一个实例,?tt><span>date</span> </tt>属性等?<tt><span>Foo</span> </tt>?tt><span>startDate</span> </tt>属性?复合路径表达式?tt><span>where</span> </tt>子句非常的强大,考虑如下情况Q?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat cat where cat.mate.name is not null </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">该查询将被翻译成Z个含有表q接Q内q接Q的SQL查询。如果你打算写像q样的查询语?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Foo foo where foo.bar.baz.customer.address.city is not null </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">在SQL中,你ؓ达此目的需要进行一个四表连接的查询?/span> </span></p> <p><span style="font-size: 10pt"><span style="font-size: small"><tt><span>=</span> </tt>q算W不仅可以被用来比较属性的|也可以用来比较实例:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat cat, Cat rival where cat.mate = rival.mate </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">select cat, mate from Cat cat, Cat mate where cat.mate = mate </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">Ҏ属性(写Q?tt><span>id</span> </tt>可以用来表示一个对象的唯一的标识符。(你也可以使用该对象的属性名。)</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat as cat where cat.id = 123 from Cat as cat where cat.mate.id = 69 </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">W二个查询是有效的。此时不需要进行表q接Q?/span> </span></p> <p><span style="font-size: 10pt"><span style="font-size: small">同样也可以用复合标识符。比?tt><span>Person</span> </tt>cL一个复合标识符Q它?tt><span>country</span> </tt>属??tt><span>medicareNumber</span> </tt>属性组成?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from bank.Person person where person.id.country = 'AU' and person.id.medicareNumber = 123456 </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from bank.Account account where account.owner.id.country = 'AU' and account.owner.id.medicareNumber = 123456 </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">W二个查询也不需要进行表q接?/span> </span></p> <p><span style="font-size: 10pt"><span style="font-size: small">同样的,Ҏ属?tt><span>class</span> </tt>在进行多态持久化的情况下被用来存取一个实例的鉴别|discriminator valueQ?一个嵌入到where子句中的Javacȝ名字被转换cȝ鉴别倹{?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat cat where cat.class = DomesticCat </span> </span></pre> <p><span style="font-size: small"><span style="font-size: 10pt">你也可以声明一个属性的cd是组件或者复合用L型(以及q件构成的lg{等Q。永q不要尝试用以lgcd来结路径表达式(path-expression_rQ(与此相反Q你应当使用lg的一个属性来l尾Q?举例来说Q如?tt><span>store.owner</span> </tt>含有一个包含了lg的实?tt><span>address</span> </tt></span></span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">store.owner.address.city // 正确 store.owner.address // 错误! </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">一?#8220;L”cd有两个特D的属?tt><span>id</span> </tt>?tt><span>class</span> </tt>, 来允许我们按照下面的方式表达一个连接(<tt><span>AuditLog.item</span> </tt>是一个属性,该属性被映射?tt><span><any></span> </tt>Q?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from AuditLog log, Payment payment where log.item.class = 'Payment' and log.item.id = payment.id </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">注意Q在上面的查询与句中Q?tt><span>log.item.class</span> </tt>?<tt><span>payment.class</span> </tt>涉及到完全不同的数据库中的列?/span> </span></p> </div> <div lang="zh-cn" xml:lang="zh-cn"> <div> <div> <div> <h2 style="clear: both"><span style="font-size: small"><a name="queryhql-expression_rs"></a><span style="font-size: 10pt">8.表达?/span></span><span style="font-size: 10pt"> </span></h2> </div> </div> </div> <p><span style="font-size: 10pt"><span style="font-size: small">?tt><span>where</span> </tt>子句中允怋用的表达式包括大多数你可以在SQL使用的表辑ּU类:</span> </span></p> <div> <ul type="disc" compact> <li> <p><span style="font-size: small"><span style="font-size: 10pt">数学q算W?tt><span>+, -, *, /</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt">二进制比较运符<tt><span>=, >=, <=, <>, !=, like</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt">逻辑q算W?tt><span>and, or, not</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt"><tt><span>in</span> </tt>, <tt><span>not in</span> </tt>, <tt><span>between</span> </tt>, <tt><span>is null</span> </tt>, <tt><span>is not null</span> </tt>, <tt><span>is empty</span> </tt>, <tt><span>is not empty</span> </tt>, <tt><span>member of</span> </tt>and <tt><span>not member of</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt">"单的" case, <tt><span>case ... when ... then ... else ... end</span> </tt>,?"搜烦" case, <tt><span>case when ... then ... else ... end</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt">字符串连接符<tt><span>...||...</span> </tt>or <tt><span>concat(...,...)</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt"><tt><span>current_date()</span> </tt>, <tt><span>current_time()</span> </tt>, <tt><span>current_timestamp()</span> </tt></span></span></p> <li> <p><span style="font-size: 10pt"><span style="font-size: small"><tt><span>second(...)</span> </tt>, <tt><span>minute(...)</span> </tt>, <tt><span>hour(...)</span> </tt>, <tt><span>day(...)</span> </tt>, <tt><span>month(...)</span> </tt>, <tt><span>year(...)</span> </tt>,</span> </span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt">EJB-QL 3.0定义的Q何函数或操作Q?tt><span>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length()</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt"><tt><span>coalesce()</span> </tt>?<tt><span>nullif()</span> </tt></span></span></p> <li> <p><span style="font-size: 10pt"><span style="font-size: small"><tt><span>cast(... as ...)</span> </tt>, 其第二个参数是某Hibernatecd的名字,以及<tt><span>extract(... from ...)</span> </tt>Q只要ANSI <tt><span>cast()</span> </tt>?<tt><span>extract()</span> </tt>被底层数据库支持</span> </span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt">M数据库支持的SQL标量函数Q比?tt><span>sign()</span> </tt>, <tt><span>trunc()</span> </tt>, <tt><span>rtrim()</span> </tt>, <tt><span>sin()</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt">JDBC参数传入 <tt><span>?</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt">命名参数<tt><span>:name</span> </tt>, <tt><span>:start_date</span> </tt>, <tt><span>:x1</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt">SQL 直接帔R <tt><span>'foo'</span> </tt>, <tt><span>69</span> </tt>, <tt><span>'1970-01-01 10:00:01.0'</span> </tt></span></span></p> <li> <p><span style="font-size: small"><span style="font-size: 10pt">Java <tt><span>public static final</span> </tt>cd的常?<tt><span>eg.Color.TABBY</span> </tt></span></span></p> </li> </ul> </div> <p><span style="font-size: 10pt"><span style="font-size: small">关键?tt><span>in</span> </tt>?tt><span>between</span> </tt>可按如下Ҏ使用:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from DomesticCat cat where cat.name between 'A' and 'B' </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' ) </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">而且否定的格式也可以如下书写Q?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from DomesticCat cat where cat.name not between 'A' and 'B' </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' ) </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">同样, 子句<tt><span>is null</span> </tt>?tt><span>is not null</span> </tt>可以被用来测试空?null).</span> </span></p> <p><span style="font-size: 10pt"><span style="font-size: small">在Hibernate配置文g中声明HQL“查询替代Qquery substitutionsQ?#8221;之后Q布表辑ּQBooleansQ可以在其他表达式中L的?</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small"><property name="hibernate.query.substitutions">true 1, false 0</property> </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">pȝ该HQL转换为SQL语句Ӟ该设|表明将用字W?<tt><span>1</span> </tt>?<tt><span>0</span> </tt>?取代关键?tt><span>true</span> </tt>?<tt><span>false</span> </tt>:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat cat where cat.alive = true </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">你可以用Ҏ属?tt><span>size</span> </tt>, 或是Ҏ函数<tt><span>size()</span> </tt>试一个集合的大小?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat cat where cat.kittens.size > 0 </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat cat where size(cat.kittens) > 0 </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">对于索引了(有序Q的集合Q你可以使用<tt><span>minindex</span> </tt>?<tt><span>maxindex</span> </tt>函数来引用到最与最大的索引序数。同理,你可以?tt><span>minelement</span> </tt>?<tt><span>maxelement</span> </tt>函数来引用到一个基本数据类型的集合中最与最大的元素?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Calendar cal where maxelement(cal.holidays) > current date </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from Order order where maxindex(order.items) > 100 </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from Order order where minelement(order.items) > 10000 </span> </span></pre> <p><span style="font-size: small"><span style="font-size: 10pt">在传递一个集合的索引集或者是元素?<tt><span>elements</span> </tt>?tt><span>indices</span> </tt>函数) 或者传递一个子查询的结果的时候,可以使用SQL函数<tt><span>any, some, all, exists, in</span> </tt></span></span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select mother from Cat as mother, Cat as kit where kit in elements(foo.kittens) </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">select p from NameList list, Person p where p.name = some elements(list.names) </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from Cat cat where exists elements(cat.kittens) </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from Player p where 3 > all elements(p.scores) </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">from Show show where 'fizard' in indices(show.acts) </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">注意Q在Hibernate3U,q些l构变量- <tt><span>size</span> </tt>, <tt><span>elements</span> </tt>, <tt><span>indices</span> </tt>, <tt><span>minindex</span> </tt>, <tt><span>maxindex</span> </tt>, <tt><span>minelement</span> </tt>, <tt><span>maxelement</span> </tt>- 只能在where子句中用?/span> </span></p> <p><span style="font-size: 10pt"><span style="font-size: small">一个被索引q的Q有序的Q集合的元素(arrays, lists, maps)可以在其他烦引中被引用(只能在where子句中)Q?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from Order order where order.items[0].id = 1234 </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">select person from Person person, Calendar calendar where calendar.holidays['national day'] = person.birthDay and person.nationality.calendar = calendar </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">select item from Item item, Order order where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11 </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">select item from Item item, Order order where order.items[ maxindex(order.items) ] = item and order.id = 11 </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">?tt><span>[]</span> </tt>中的表达式甚臛_以是一个算数表辑ּ?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select item from Item item, Order order where order.items[ size(order.items) - 1 ] = item </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">对于一个一对多的关联(one-to-many associationQ或是值的集合中的元素Q?HQL也提供内建的<tt><span>index()</span> </tt>函数Q?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select item, index(item) from Order order join order.items item where index(item) < 5 </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">如果底层数据库支持标量的SQL函数Q它们也可以被?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from DomesticCat cat where upper(cat.name) like 'FRI%' </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">如果你还不能Ҏ有的q些׃不疑Q想想下面的查询。如果用SQLQ语句长度会增长多少Q可L会下降多少Q?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select cust from Product prod, Store store inner join store.customers cust where prod.name = 'widget' and store.location.name in ( 'Melbourne', 'Sydney' ) and prod = all elements(cust.currentOrder.lineItems) </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small"><span><em>提示:</em> </span>会像如下的语?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order FROM customers cust, stores store, locations loc, store_customers sc, product prod WHERE prod.name = 'widget' AND store.loc_id = loc.id AND loc.name IN ( 'Melbourne', 'Sydney' ) AND sc.store_id = store.id AND sc.cust_id = cust.id AND prod.id = ALL( SELECT item.prod_id FROM line_items item, orders o WHERE item.order_id = o.id AND cust.current_order = o.id ) </span> </span></pre> </div> <div lang="zh-cn" xml:lang="zh-cn"> <div> <div> <div> <h2 style="clear: both"><span style="font-size: small"><a name="queryhql-ordering"></a><span style="font-size: 10pt">9.order by子句</span></span><span style="font-size: 10pt"> </span></h2> </div> </div> </div> <p><span style="font-size: 10pt"><span style="font-size: small">查询q回的列?list)可以按照一个返回的cLlgQcomponents)中的M属性(propertyQ进行排序:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">from DomesticCat cat order by cat.name asc, cat.weight desc, cat.birthdate </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">可选的<tt><span>asc</span> </tt>?tt><span>desc</span> </tt>关键字指明了按照升序或降序进行排?</span> </span></p> </div> <div lang="zh-cn" xml:lang="zh-cn"> <div> <div> <div> <h2 style="clear: both"><span style="font-size: small"><a name="queryhql-grouping"></a><span style="font-size: 10pt">10.group by子句</span></span><span style="font-size: 10pt"> </span></h2> </div> </div> </div> <p><span style="font-size: 10pt"><span style="font-size: small">一个返回聚集?aggregate values)的查询可以按照一个返回的cLlgQcomponents)中的M属性(propertyQ进行分l:</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select cat.color, sum(cat.weight), count(cat) from Cat cat group by cat.color </span> </span></pre> <pre><span style="font-size: 10pt"><span style="font-size: small">select foo.id, avg(name), max(name) from Foo foo join foo.names name group by foo.id </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small"><tt><span>having</span> </tt>子句在这里也允许使用.</span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select cat.color, sum(cat.weight), count(cat) from Cat cat group by cat.color having cat.color in (eg.Color.TABBY, eg.Color.BLACK) </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">如果底层的数据库支持的话(例如不能在MySQL中?QSQL的一般函C聚集函数也可以出??tt><span>having</span> </tt>?tt><span>order by</span> </tt>子句中?/span> </span></p> <pre><span style="font-size: 10pt"><span style="font-size: small">select cat from Cat cat join cat.kittens kitten group by cat having avg(kitten.weight) > 100 order by count(kitten) asc, sum(kitten.weight) desc </span> </span></pre> <p><span style="font-size: 10pt"><span style="font-size: small">注意<tt><span>group by</span> </tt>子句?<tt><span>order by</span> </tt>子句中都不能包含术表达式(arithmetic expression_rsQ?</span> </span></p> </div> <img src ="http://www.aygfsteel.com/shiwenfeng/aggbug/310638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/shiwenfeng/" target="_blank">shiwf</a> 2010-01-24 13:55 <a href="http://www.aygfsteel.com/shiwenfeng/archive/2010/01/24/310638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʹ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">͸</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">÷</a>| <a href="http://" target="_blank">潭</a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">ī񹤿</a>| <a href="http://" target="_blank">ء</a>| <a href="http://" target="_blank">ന</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>