日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate 持久化状态、HQL语句大全(转)

發(fā)布時間:2023/12/4 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate 持久化状态、HQL语句大全(转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Hibernate 持久化狀態(tài)

在Hibernate中,最核心的概念就是對PO的狀態(tài)管理。一個PO有三種狀態(tài):

1、未被持久化的VO

此時就是一個內(nèi)存對象VO,由JVM管理生命周期

2、已被持久化的PO,并且在Session生命周期內(nèi)

此時映射數(shù)據(jù)庫數(shù)據(jù),由數(shù)據(jù)庫管理生命周期

3、曾被持久化過,但現(xiàn)在和Session已經(jīng)detached了,以VO的身份在運(yùn)行

這種和Session已經(jīng)detached的PO還能夠進(jìn)入另一個Session,繼續(xù)進(jìn)行PO狀態(tài)管理,此時它就成為PO的第二種狀態(tài)了。這種PO實(shí)際上是跨了Session進(jìn)行了狀態(tài)維護(hù)的。

在傳統(tǒng)的JDO1.x中,PO只有前面兩種狀態(tài),一個PO一旦脫離PM,就喪失了狀態(tài)了,不再和數(shù)據(jù)庫數(shù)據(jù)關(guān)聯(lián),成為一個純粹的內(nèi)存VO,它即使進(jìn)入一個新的PM,也不能恢復(fù)它的狀態(tài)了。

Hibernate強(qiáng)的地方就在于,一個PO脫離Session之后,還能保持狀態(tài),再進(jìn)入一個新的Session之后,就恢復(fù)狀態(tài)管理的能力,但此時狀態(tài)管理需要使用session.update或者session.saveOrUpdate,這就是Hibernate Reference中提到的“requires a slightly different programming model ”

現(xiàn)在正式進(jìn)入本話題:

簡單的來說,update和saveOrUpdate是用來對跨Session的PO進(jìn)行狀態(tài)管理的。

假設(shè)你的PO不需要跨Session的話,那么就不需要用到,例如你打開一個Session,對PO進(jìn)行操作,然后關(guān)閉,之后這個PO你也不會再用到了,那么就不需要用update。

因此,我們來看看上例:

Java代碼

  • Foo?foo=sess.load(Foo.class,id);;? ??
  • foo.setXXX(xxx);;? ??
  • sess.flush();; ??
  • sess.commit();;???
  • PO對象foo的操作都在一個Session生命周期內(nèi)完成,因此不需要顯式的進(jìn)行sess.update(foo)這樣的操作。Hibernate會自動監(jiān)測到foo對象已經(jīng)被修改過,因此就向數(shù)據(jù)庫發(fā)送一個update的sql。當(dāng)然如果你非要加上sess.update(foo)也不會錯,只不過這樣做沒有任何必要。

    而跨Session的意思就是說這個PO對象在Session關(guān)閉之后,你還把它當(dāng)做一個VO來用,后來你在Session外面又修改了它的屬性,然后你又想打開一個Session,把VO的屬性修改保存到數(shù)據(jù)庫里面,那么你就需要用update了。

    Java代碼

  • //?in?the?first?session? ??
  • Cat?cat?=?(Cat);?firstSession.load(Cat.class,?catId);;? ??
  • Cat?potentialMate?=?new?Cat();;? ??
  • firstSession.save(potentialMate);;? ??
  • ??
  • //?in?a?higher?tier?of?the?application? ??
  • cat.setMate(potentialMate);;? ??
  • ??
  • //?later,?in?a?new?session? ??
  • secondSession.update(cat);;??//?update?cat? ??
  • secondSession.update(mate);;?//?update?mate??
  • cat和mate對象是在第一個session中取得的,在第一個session關(guān)閉之后,他們就成了PO的第三種狀態(tài),和Session已經(jīng)detached的PO,此時他們的狀態(tài)信息仍然被保留下來了。當(dāng)他們進(jìn)入第二個session之后,立刻就可以進(jìn)行狀態(tài)的更新。但是由于對cat的修改操作:cat.setMate(potentialMate); 是在Session外面進(jìn)行的,Hibernate不可能知道cat對象已經(jīng)被改過了,第二個Session并不知道這種修改,因此一定要顯式的調(diào)用secondSession.update(cat); 通知Hibernate,cat對象已經(jīng)修改了,你必須發(fā)送update的sql了。

    所以update的作用就在于此,它只會被用于當(dāng)一個PO對象跨Session進(jìn)行狀態(tài)同步的時候才需要寫。而一個PO對象當(dāng)它不需要跨Session進(jìn)行狀態(tài)管理的時候,是不需要寫update的。

    再談?wù)剆aveOrUpdate的用場:

    saveOrUpdate和update的區(qū)別就在于在跨Session的PO狀態(tài)管理中,Hibernate對PO采取何種策略。

    例如當(dāng)你寫一個DAOImpl的時候,讓cat對象增加一個mate,如下定義:

    Java代碼

  • public?void?addMate(Cat?cat,?Mate?mate);?{ ??
  • ????Session?session?=?...; ??
  • ????Transacton?tx?=?...; ??
  • ????session.update(cat);; ??
  • ????cat.addMate(mate);; ??
  • ????tx.commit();; ??
  • ????session.close();; ??
  • };??
  • 顯然你是需要把Hibernate的操作封裝在DAO里面的,讓業(yè)務(wù)層的程序員和Web層的程序員不需要了解Hibernate,直接對DAO進(jìn)行調(diào)用。

    此時問題就來了:上面的代碼運(yùn)行正確有一個必要的前提,那就是方法調(diào)用參數(shù)cat對象必須是一個已經(jīng)被持久化過的PO,也就是來說,它應(yīng)該首先從數(shù)據(jù)庫查詢出來,然后才能這樣用。但是業(yè)務(wù)層的程序員顯然不知道這種內(nèi)部的玄妙,如果他的業(yè)務(wù)是現(xiàn)在增加一個cat,然后再增加它的mate,他顯然會這樣調(diào)用,new一個cat對象出來,然后就addMate:

    Java代碼

  • Cat?cat?=?new?Cat();; ??
  • cat.setXXX();; ??
  • daoimpl.addMate(cat,mate);;??
  • 但是請注意看,這個cat對象只是一個VO,它沒有被持久化過,它還不是PO,它沒有資格調(diào)用addMate方法,因此調(diào)用addMate方法不會真正往數(shù)據(jù)庫里面發(fā)送update的sql,這個cat對象必須先被save到數(shù)據(jù)庫,在真正成為一個PO之后,才具備addMate的資格。

    你必須這樣來操作:

    Java代碼

  • Cat?cat?=?new?Cat();; ??
  • cat.setXXX();; ??
  • daoimpl.addCat(cat);; ??
  • daoimpl.addMate(cat,?mate);;??
  • 先持久化cat,然后才能對cat進(jìn)行其他的持久化操作。因此要求業(yè)務(wù)層的程序員必須清楚cat對象處于何種狀態(tài),到底是第一種,還是第三種。如果是第一種,就要先save,再addMate;如果是第三種,就直接addMate。

    但是最致命的是,如果整個軟件分層很多,業(yè)務(wù)層的程序員他拿到這個cat對象也可能是上層Web應(yīng)用層傳遞過來的cat,他自己也不知道這個cat究竟是VO,沒有被持久化過,還是已經(jīng)被持久化過,那么他根本就沒有辦法寫程序了。

    所以這樣的DAOImpl顯然是有問題的,它會對業(yè)務(wù)層的程序員造成很多編程上的陷阱,業(yè)務(wù)層的程序員必須深刻的了解他調(diào)用的每個DAO對PO對象進(jìn)行了何種狀態(tài)管理,必須深刻的了解他的PO對象在任何時候處于什么確切的狀態(tài),才能保證編程的正確性,顯然這是做不到的,但是有了saveOrUpdate,這些問題就迎刃而解了。

    現(xiàn)在你需要修改addMate方法:

    Java代碼

  • public?void?addMate(Cat?cat,?Mate?mate);?{ ??
  • ????Session?session?=?...; ??
  • ????Transacton?tx?=?...; ??
  • ????session.saveOrUpdate(cat);; ??
  • ????cat.addMate(mate);; ??
  • ????tx.commit();; ??
  • ????session.close();; ??
  • };??
  • 如上,如果業(yè)務(wù)層的程序員傳進(jìn)來的是一個已經(jīng)持久化過的PO對象,那么Hibernate會更新cat對象(假設(shè)業(yè)務(wù)層的程序員在Session外面修改過cat的屬性),如果傳進(jìn)來的是一個新new出來的對象,那么向數(shù)據(jù)庫save這個PO對象。

    BTW: Hibernate此時究竟采取更新cat對象,還是save cat對象,取決于unsave-value的設(shè)定。

    這樣,業(yè)務(wù)層的程序員就不必再操心PO的狀態(tài)問題了,對于他們來說,不管cat是new出來的對象,只是一個VO也好;還是從數(shù)據(jù)庫查詢出來的的PO對象也好,全部都是直接addMate就OK了:

    Java代碼

  • daoimple.addMate(cat,?mate);;??
  • 這便是saveOrUpdate的作用。

    HQL語句大全(轉(zhuǎn))

    第?15?章?HQL: Hibernate查詢語言

    Hibernate配備了一種非常強(qiáng)大的查詢語言,這種語言看上去很像SQL。但是不要被語法結(jié)構(gòu) 上的相似所迷惑,HQL是非常有意識的被設(shè)計(jì)為完全面向?qū)ο蟮牟樵?#xff0c;它可以理解如繼承、多態(tài) 和關(guān)聯(lián)之類的概念。

    15.1.?大小寫敏感性問題

    除了Java類與屬性的名稱外,查詢語句對大小寫并不敏感。 所以?SeLeCT?與?sELEct?以及?SELECT?是相同的,但是?org.hibernate.eg.FOO?并不等價于?org.hibernate.eg.Foo?并且?foo.barSet?也不等價于?foo.BARSET

    本手冊中的HQL關(guān)鍵字將使用小寫字母. 很多用戶發(fā)現(xiàn)使用完全大寫的關(guān)鍵字會使查詢語句 的可讀性更強(qiáng), 但我們發(fā)現(xiàn),當(dāng)把查詢語句嵌入到Java語句中的時候使用大寫關(guān)鍵字比較難看。

    15.2.?from子句

    Hibernate中最簡單的查詢語句的形式如下:

    from eg.Cat

    該子句簡單的返回eg.Cat類的所有實(shí)例。 通常我們不需要使用類的全限定名, 因?yàn)?auto-import(自動引入) 是缺省的情況。 所以我們幾乎只使用如下的簡單寫法:

    from Cat

    大多數(shù)情況下, 你需要指定一個別名, 原因是你可能需要 在查詢語句的其它部分引用到Cat

    from Cat as cat

    這個語句把別名cat指定給類Cat?的實(shí)例, 這樣我們就可以在隨后的查詢中使用此別名了。 關(guān)鍵字as?是可選的,我們也可以這樣寫:

    from Cat cat

    子句中可以同時出現(xiàn)多個類, 其查詢結(jié)果是產(chǎn)生一個笛卡兒積或產(chǎn)生跨表的連接。

    from Formula, Parameterfrom Formula as form, Parameter as param

    查詢語句中別名的開頭部分小寫被認(rèn)為是實(shí)踐中的好習(xí)慣, 這樣做與Java變量的命名標(biāo)準(zhǔn)保持了一致 (比如,domesticCat)。

    15.3.?關(guān)聯(lián)(Association)與連接(Join)

    我們也可以為相關(guān)聯(lián)的實(shí)體甚至是對一個集合中的全部元素指定一個別名, 這時要使用關(guān)鍵字join

    from Cat as cat inner join cat.mate as mate left outer join cat.kittens as kittenfrom Cat as cat left join cat.mate.kittens as kittensfrom Formula form full join form.parameter param

    受支持的連接類型是從ANSI SQL中借鑒來的。

    • inner join(內(nèi)連接)

    • left outer join(左外連接)

    • right outer join(右外連接)

    • full join?(全連接,并不常用)

    語句inner join,?left outer join?以及?right outer join?可以簡寫。

    from Cat as cat join cat.mate as mate left join cat.kittens as kitten

    還 有,一個"fetch"連接允許僅僅使用一個選擇語句就將相關(guān)聯(lián)的對象或一組值的集合隨著他們的父對象的初始化而被初始化,這種方法在使用到集合的情況下 尤其有用,對于關(guān)聯(lián)和集合來說,它有效的代替了映射文件中的外聯(lián)接 與延遲聲明(lazy declarations). 查看?第?20.1?節(jié) “ 抓取策略(Fetching strategies) ”?以獲得等多的信息。

    from Cat as cat inner join fetch cat.mate left join fetch cat.kittens

    一個fetch連接通常不需要被指定別名, 因?yàn)橄嚓P(guān)聯(lián)的對象不應(yīng)當(dāng)被用在?where?子句 (或其它任何子句)中。同時,相關(guān)聯(lián)的對象 并不在查詢的結(jié)果中直接返回,但可以通過他們的父對象來訪問到他們。

    注意fetch構(gòu)造變量在使用了scroll()?或?iterate()函數(shù) 的查詢中是不能使用的。最后注意,使用full join fetch?與?right join fetch是沒有意義的。

    如果你使用屬性級別的延遲獲取(lazy fetching)(這是通過重新編寫字節(jié)碼實(shí)現(xiàn)的),可以使用?fetch all properties?來強(qiáng)制Hibernate立即取得那些原本需要延遲加載的屬性(在第一個查詢中)。

    from Document fetch all properties order by namefrom Document doc fetch all properties where lower(doc.name) like '%cats%'

    15.4.?select子句

    select?子句選擇將哪些對象與屬性返 回到查詢結(jié)果集中. 考慮如下情況:

    select mate from Cat as cat inner join cat.mate as mate

    該語句將選擇mates of other?Cats。(其他貓的配偶) 實(shí)際上, 你可以更簡潔的用以下的查詢語句表達(dá)相同的含義:

    select cat.mate from Cat cat

    查詢語句可以返回值為任何類型的屬性,包括返回類型為某種組件(Component)的屬性:

    select cat.name from DomesticCat catwhere cat.name like 'fri%'select cust.name.firstName from Customer as cust

    查詢語句可以返回多個對象和(或)屬性,存放在?Object[]隊(duì)列中,

    select mother, offspr, mate.name from DomesticCat as mother inner join mother.mate as mate left outer join mother.kittens as offspr

    或存放在一個List對象中,

    select new list(mother, offspr, mate.name)from DomesticCat as mother inner join mother.mate as mate left outer join mother.kittens as offspr

    也可能直接返回一個實(shí)際的類型安全的Java對象,

    select new Family(mother, mate, offspr)from DomesticCat as mother join mother.mate as mate left join mother.kittens as offspr

    假設(shè)類Family有一個合適的構(gòu)造函數(shù).

    你可以使用關(guān)鍵字as給“被選擇了的表達(dá)式”指派別名:

    select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as nfrom Cat cat

    這種做法在與子句select new map一起使用時最有用:

    select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )from Cat cat

    該查詢返回了一個Map的對象,內(nèi)容是別名與被選擇的值組成的名-值映射。

    15.5.?聚集函數(shù)

    HQL查詢甚至可以返回作用于屬性之上的聚集函數(shù)的計(jì)算結(jié)果:

    select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)from Cat cat

    受支持的聚集函數(shù)如下:

    • avg(...), sum(...), min(...), max(...)

    • count(*)

    • count(...), count(distinct ...), count(all...)

    你可以在選擇子句中使用數(shù)學(xué)操作符、連接以及經(jīng)過驗(yàn)證的SQL函數(shù):

    select cat.weight + sum(kitten.weight) from Cat cat join cat.kittens kittengroup by cat.id, cat.weightselect firstName||' '||initial||' '||upper(lastName) from Person

    關(guān)鍵字distinctall?也可以使用,它們具有與SQL相同的語義.

    select distinct cat.name from Cat catselect count(distinct cat.name), count(cat) from Cat cat

    15.6.?多態(tài)查詢

    一個如下的查詢語句:

    from Cat as cat

    不僅返回Cat類的實(shí)例, 也同時返回子類?DomesticCat的實(shí)例. Hibernate 可以在from子句中指定任何?Java 類或接口. 查詢會返回繼承了該類的所有持久化子類 的實(shí)例或返回聲明了該接口的所有持久化類的實(shí)例。下面的查詢語句返回所有的被持久化的對象:

    from java.lang.Object o

    接口Named?可能被各種各樣的持久化類聲明:

    from Named n, Named m where n.name = m.name

    注意,最后的兩個查詢將需要超過一個的SQL?SELECT.這表明order by子句 沒有對整個結(jié)果集進(jìn)行正確的排序. (這也說明你不能對這樣的查詢使用Query.scroll()方法.)

    15.7.?where子句

    where子句允許你將返回的實(shí)例列表的范圍縮小. 如果沒有指定別名,你可以使用屬性名來直接引用屬性:

    from Cat where name='Fritz'

    如果指派了別名,需要使用完整的屬性名:

    from Cat as cat where cat.name='Fritz'

    返回名為(屬性name等于)'Fritz'的Cat類的實(shí)例。

    select foo from Foo foo, Bar barwhere foo.startDate = bar.date

    將返回所有滿足下面條件的Foo類的實(shí)例: 存在如下的bar的一個實(shí)例,其date屬性等于?FoostartDate屬性。 復(fù)合路徑表達(dá)式使得where子句非常的強(qiáng)大,考慮如下情況:

    from Cat cat where cat.mate.name is not null

    該查詢將被翻譯成為一個含有表連接(內(nèi)連接)的SQL查詢。如果你打算寫像這樣的查詢語句

    from Foo foo where foo.bar.baz.customer.address.city is not null

    在SQL中,你為達(dá)此目的將需要進(jìn)行一個四表連接的查詢。

    =運(yùn)算符不僅可以被用來比較屬性的值,也可以用來比較實(shí)例:

    from Cat cat, Cat rival where cat.mate = rival.mateselect cat, mate from Cat cat, Cat matewhere cat.mate = mate

    特殊屬性(小寫)id可以用來表示一個對象的唯一的標(biāo)識符。(你也可以使用該對象的屬性名。)

    from Cat as cat where cat.id = 123from Cat as cat where cat.mate.id = 69

    第二個查詢是有效的。此時不需要進(jìn)行表連接!

    同樣也可以使用復(fù)合標(biāo)識符。比如Person類有一個復(fù)合標(biāo)識符,它由country屬性 與medicareNumber屬性組成。

    from bank.Person personwhere person.id.country = 'AU' and person.id.medicareNumber = 123456from bank.Account accountwhere account.owner.id.country = 'AU' and account.owner.id.medicareNumber = 123456

    第二個查詢也不需要進(jìn)行表連接。

    同樣的,特殊屬性class在進(jìn)行多態(tài)持久化的情況下被用來存取一個實(shí)例的鑒別值(discriminator value)。 一個嵌入到where子句中的Java類的名字將被轉(zhuǎn)換為該類的鑒別值。

    from Cat cat where cat.class = DomesticCat

    你也可以聲明一個屬性的類型是組件或者復(fù)合用戶類型(以及由組件構(gòu)成的組件等等)。永遠(yuǎn)不要嘗試使用以組件類型來結(jié)尾的路徑表達(dá)式(path-expression) (與此相反,你應(yīng)當(dāng)使用組件的一個屬性來結(jié)尾)。 舉例來說,如果store.owner含有一個包含了組件的實(shí)體address

    store.owner.address.city // 正確store.owner.address // 錯誤!

    一個“任意”類型有兩個特殊的屬性idclass, 來允許我們按照下面的方式表達(dá)一個連接(AuditLog.item?是一個屬性,該屬性被映射為<any>)。

    from AuditLog log, Payment payment where log.item.class = 'Payment' and log.item.id = payment.id

    注意,在上面的查詢與句中,log.item.class?和?payment.class?將涉及到完全不同的數(shù)據(jù)庫中的列。

    15.8.?表達(dá)式

    where子句中允許使用的表達(dá)式包括 大多數(shù)你可以在SQL使用的表達(dá)式種類:

    • 數(shù)學(xué)運(yùn)算符+, -, *, /

    • 二進(jìn)制比較運(yùn)算符=, >=, <=, <>, !=, like

    • 邏輯運(yùn)算符and, or, not

    • in,?not in,?between,?is null,?is not null,?is empty,?is not empty,?member of?and?not member of

    • "簡單的" case,?case ... when ... then ... else ... end,和 "搜索" case,?case when ... then ... else ... end

    • 字符串連接符...||...?or?concat(...,...)

    • current_date(),?current_time(),?current_timestamp()

    • second(...),?minute(...),?hour(...),?day(...),?month(...),?year(...),

    • EJB-QL 3.0定義的任何函數(shù)或操作:substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length()

    • coalesce()?和?nullif()

    • cast(... as ...), 其第二個參數(shù)是某Hibernate類型的名字,以及extract(... from ...),只要ANSI?cast()?和extract()?被底層數(shù)據(jù)庫支持

    • 任何數(shù)據(jù)庫支持的SQL標(biāo)量函數(shù),比如sign(),?trunc(),?rtrim(),?sin()

    • JDBC參數(shù)傳入??

    • 命名參數(shù):name,?:start_date,?:x1

    • SQL 直接常量?'foo',?69,?'1970-01-01 10:00:01.0'

    • Java?public static final?類型的常量?eg.Color.TABBY

    關(guān)鍵字inbetween可按如下方法使用:

    from DomesticCat cat where cat.name between 'A' and 'B'from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )

    而且否定的格式也可以如下書寫:

    from DomesticCat cat where cat.name not between 'A' and 'B'from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )

    同樣, 子句is nullis not null可以被用來測試空值(null).

    在Hibernate配置文件中聲明HQL“查詢替代(query substitutions)”之后, 布爾表達(dá)式(Booleans)可以在其他表達(dá)式中輕松的使用:

    <property name="hibernate.query.substitutions">true 1, false 0</property>

    系統(tǒng)將該HQL轉(zhuǎn)換為SQL語句時,該設(shè)置表明將用字符?1?和?0?來 取代關(guān)鍵字true?和?false:

    from Cat cat where cat.alive = true

    你可以用特殊屬性size, 或是特殊函數(shù)size()測試一個集合的大小。

    from Cat cat where cat.kittens.size > 0from Cat cat where size(cat.kittens) > 0

    對于索引了(有序)的集合,你可以使用minindex?與?maxindex函數(shù)來引用到最小與最大的索引序數(shù)。 同理,你可以使用minelement?與?maxelement函數(shù)來 引用到一個基本數(shù)據(jù)類型的集合中最小與最大的元素。

    from Calendar cal where maxelement(cal.holidays) > current datefrom Order order where maxindex(order.items) > 100from Order order where minelement(order.items) > 10000

    在傳遞一個集合的索引集或者是元素集(elementsindices?函數(shù)) 或者傳遞一個子查詢的結(jié)果的時候,可以使用SQL函數(shù)any, some, all, exists, in

    select mother from Cat as mother, Cat as kitwhere kit in elements(foo.kittens)select p from NameList list, Person pwhere p.name = some elements(list.names)from Cat cat where exists elements(cat.kittens)from Player p where 3 > all elements(p.scores)from Show show where 'fizard' in indices(show.acts)

    注意,在Hibernate3種,這些結(jié)構(gòu)變量-?size,?elements,?indices,?minindex,?maxindex,?minelement,?maxelement?- 只能在where子句中使用。

    一個被索引過的(有序的)集合的元素(arrays, lists, maps)可以在其他索引中被引用(只能在where子句中):

    from Order order where order.items[0].id = 1234select person from Person person, Calendar calendarwhere calendar.holidays['national day'] = person.birthDay and person.nationality.calendar = calendarselect item from Item item, Order orderwhere order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11select item from Item item, Order orderwhere order.items[ maxindex(order.items) ] = item and order.id = 11

    []中的表達(dá)式甚至可以是一個算數(shù)表達(dá)式。

    select item from Item item, Order orderwhere order.items[ size(order.items) - 1 ] = item

    對于一個一對多的關(guān)聯(lián)(one-to-many association)或是值的集合中的元素, HQL也提供內(nèi)建的index()函數(shù),

    select item, index(item) from Order order join order.items itemwhere index(item) < 5

    如果底層數(shù)據(jù)庫支持標(biāo)量的SQL函數(shù),它們也可以被使用

    from DomesticCat cat where upper(cat.name) like 'FRI%'

    如果你還不能對所有的這些深信不疑,想想下面的查詢。如果使用SQL,語句長度會增長多少,可讀性會下降多少:

    select custfrom Product prod, Store store inner join store.customers custwhere prod.name = 'widget' and store.location.name in ( 'Melbourne', 'Sydney' ) and prod = all elements(cust.currentOrder.lineItems)

    提示:?會像如下的語句

    SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_orderFROM customers cust, stores store, locations loc, store_customers sc, product prodWHERE 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 )

    15.9.?order by子句

    查詢返回的列表(list)可以按照一個返回的類或組件(components)中的任何屬性(property)進(jìn)行排序:

    from DomesticCat catorder by cat.name asc, cat.weight desc, cat.birthdate

    可選的ascdesc關(guān)鍵字指明了按照升序或降序進(jìn)行排序.

    15.10.?group by子句

    一個返回聚集值(aggregate values)的查詢可以按照一個返回的類或組件(components)中的任何屬性(property)進(jìn)行分組:

    select cat.color, sum(cat.weight), count(cat) from Cat catgroup by cat.colorselect foo.id, avg(name), max(name) from Foo foo join foo.names namegroup by foo.id

    having子句在這里也允許使用.

    select cat.color, sum(cat.weight), count(cat) from Cat catgroup by cat.color having cat.color in (eg.Color.TABBY, eg.Color.BLACK)

    如果底層的數(shù)據(jù)庫支持的話(例如不能在MySQL中使用),SQL的一般函數(shù)與聚集函數(shù)也可以出現(xiàn) 在havingorder by?子句中。

    select catfrom Cat cat join cat.kittens kittengroup by cathaving avg(kitten.weight) > 100order by count(kitten) asc, sum(kitten.weight) desc

    注意group by子句與?order by子句中都不能包含算術(shù)表達(dá)式(arithmetic expressions).

    15.11.?子查詢

    對于支持子查詢的數(shù)據(jù)庫,Hibernate支持在查詢中使用子查詢。一個子查詢必須被圓括號包圍起來(經(jīng)常是SQL聚集函數(shù)的圓括號)。 甚至相互關(guān)聯(lián)的子查詢(引用到外部查詢中的別名的子查詢)也是允許的。

    from Cat as fatcat where fatcat.weight > ( select avg(cat.weight) from DomesticCat cat )from DomesticCat as cat where cat.name = some ( select name.nickName from Name as name )from Cat as cat where not exists ( from Cat as mate where mate.mate = cat )from DomesticCat as cat where cat.name not in ( select name.nickName from Name as name )

    在select列表中包含一個表達(dá)式以上的子查詢,你可以使用一個元組構(gòu)造符(tuple constructors):

    from Cat as cat where not ( cat.name, cat.color ) in ( select cat.name, cat.color from DomesticCat cat )

    注意在某些數(shù)據(jù)庫中(不包括Oracle與HSQL),你也可以在其他語境中使用元組構(gòu)造符, 比如查詢用戶類型的組件與組合:

    from Person where name = ('Gavin', 'A', 'King')

    該查詢等價于更復(fù)雜的:

    from Person where name.first = 'Gavin' and name.initial = 'A' and name.last = 'King')

    有兩個很好的理由使你不應(yīng)當(dāng)作這樣的事情:首先,它不完全適用于各個數(shù)據(jù)庫平臺;其次,查詢現(xiàn)在依賴于映射文件中屬性的順序。

    15.12.?HQL示例

    Hibernate查詢可以非常的強(qiáng)大與復(fù)雜。實(shí)際上,Hibernate的一個主要賣點(diǎn)就是查詢語句的威力。這里有一些例子,它們與我在最近的 一個項(xiàng)目中使用的查詢非常相似。注意你能用到的大多數(shù)查詢比這些要簡單的多!

    下面的查詢對于某個特定的客戶的所有未支付的賬單,在給定給最小總價值的情況下,返回訂單的id,條目的數(shù)量和總價值, 返回值按照總價值的結(jié)果進(jìn)行排序。為了決定價格,查詢使用了當(dāng)前目錄。作為轉(zhuǎn)換結(jié)果的SQL查詢,使用了ORDER,?ORDER_LINE,?PRODUCT,?CATALOG?和PRICE?庫表。

    select order.id, sum(price.amount), count(item)from Order as order join order.lineItems as item join item.product as product, Catalog as catalog join catalog.prices as pricewhere order.paid = false and order.customer = :customer and price.product = product and catalog.effectiveDate < sysdate and catalog.effectiveDate >= all ( select cat.effectiveDate from Catalog as cat where cat.effectiveDate < sysdate )group by orderhaving sum(price.amount) > :minAmountorder by sum(price.amount) desc

    這簡直是一個怪物!實(shí)際上,在現(xiàn)實(shí)生活中,我并不熱衷于子查詢,所以我的查詢語句看起來更像這個:

    select order.id, sum(price.amount), count(item)from Order as order join order.lineItems as item join item.product as product, Catalog as catalog join catalog.prices as pricewhere order.paid = false and order.customer = :customer and price.product = product and catalog = :currentCataloggroup by orderhaving sum(price.amount) > :minAmountorder by sum(price.amount) desc

    下面一個查詢計(jì)算每一種狀態(tài)下的支付的數(shù)目,除去所有處于AWAITING_APPROVAL狀態(tài)的支付,因?yàn)樵谠摖顟B(tài)下 當(dāng)前的用戶作出了狀態(tài)的最新改變。該查詢被轉(zhuǎn)換成含有兩個內(nèi)連接以及一個相關(guān)聯(lián)的子選擇的SQL查詢,該查詢使用了表?PAYMENT,?PAYMENT_STATUS?以及?PAYMENT_STATUS_CHANGE

    select count(payment), status.name from Payment as payment join payment.currentStatus as status join payment.statusChanges as statusChangewhere payment.status.name <> PaymentStatus.AWAITING_APPROVAL or ( statusChange.timeStamp = ( select max(change.timeStamp) from PaymentStatusChange change where change.payment = payment ) and statusChange.user <> :currentUser )group by status.name, status.sortOrderorder by status.sortOrder

    如果我把statusChanges實(shí)例集映射為一個列表(list)而不是一個集合(set), 書寫查詢語句將更加簡單.

    select count(payment), status.name from Payment as payment join payment.currentStatus as statuswhere payment.status.name <> PaymentStatus.AWAITING_APPROVAL or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUsergroup by status.name, status.sortOrderorder by status.sortOrder

    下面一個查詢使用了MS SQL Server的?isNull()函數(shù)用以返回當(dāng)前用戶所屬組織的組織帳號及組織未支付的賬。 它被轉(zhuǎn)換成一個對表ACCOUNT,?PAYMENT,?PAYMENT_STATUS,?ACCOUNT_TYPE,?ORGANIZATION?以及?ORG_USER進(jìn)行的三個內(nèi)連接, 一個外連接和一個子選擇的SQL查詢。

    select account, paymentfrom Account as account left outer join account.payments as paymentwhere :currentUser in elements(account.holder.users) and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)order by account.type.sortOrder, account.accountNumber, payment.dueDate

    對于一些數(shù)據(jù)庫,我們需要棄用(相關(guān)的)子選擇。

    select account, paymentfrom Account as account join account.holder.users as user left outer join account.payments as paymentwhere :currentUser = user and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)order by account.type.sortOrder, account.accountNumber, payment.dueDate

    15.13.?批量的UPDATE & DELETE語句

    HQL現(xiàn)在支持UPDATE與DELETE語句. 查閱?第?14.3?節(jié) “大批量更新/刪除(Bulk update/delete)”?以獲得更多信息。

    15.14.?小技巧 & 小竅門

    你可以統(tǒng)計(jì)查詢結(jié)果的數(shù)目而不必實(shí)際的返回他們:

    ( (Integer) session.iterate("select count(*) from ....").next() ).intValue()

    若想根據(jù)一個集合的大小來進(jìn)行排序,可以使用如下的語句:

    select usr.id, usr.namefrom User as usr left join usr.messages as msggroup by usr.id, usr.nameorder by count(msg)

    如果你的數(shù)據(jù)庫支持子選擇,你可以在你的查詢的where子句中為選擇的大小(selection size)指定一個條件:

    from User usr where size(usr.messages) >= 1

    如果你的數(shù)據(jù)庫不支持子選擇語句,使用下面的查詢:

    select usr.id, usr.namefrom User usr.name join usr.messages msggroup by usr.id, usr.namehaving count(msg) >= 1

    因?yàn)閮?nèi)連接(inner join)的原因,這個解決方案不能返回含有零個信息的User?類的實(shí)例, 所以這種情況下使用下面的格式將是有幫助的:

    select usr.id, usr.namefrom User as usr left join usr.messages as msggroup by usr.id, usr.namehaving count(msg) = 0

    JavaBean的屬性可以被綁定到一個命名查詢(named query)的參數(shù)上:

    Query q = s.createQuery("from foo Foo as foo where foo.name=:name and foo.size=:size");q.setProperties(fooBean); // fooBean包含方法getName()與getSize()List foos = q.list();

    通過將接口Query與一個過濾器(filter)一起使用,集合(Collections)是可以分頁的:

    Query q = s.createFilter( collection, "" ); // 一個簡單的過濾器q.setMaxResults(PAGE_SIZE);q.setFirstResult(PAGE_SIZE * pageNumber);List page = q.list();

    通過使用查詢過濾器(query filter)可以將集合(Collection)的原素分組或排序:

    Collection orderedCollection = s.filter( collection, "order by this.amount" );Collection counts = s.filter( collection, "select this.type, count(this) group by this.type" );

    不用通過初始化,你就可以知道一個集合(Collection)的大小:

    ( (Integer) session.iterate("select count(*) from ....").next() ).intValue();
    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的Hibernate 持久化状态、HQL语句大全(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    日韩三级免费 | 182午夜在线观看 | 国模一区二区三区四区 | 毛片网站在线观看 | 超碰人人超 | 日韩理论在线视频 | 天天干,天天操 | 日韩在线观看不卡 | 色婷婷亚洲婷婷 | 五月婷婷丁香激情 | 日日爽天天 | 亚洲欧美日本一区二区三区 | 香蕉久久久久久久 | 激情视频二区 | 亚洲精品综合久久 | 视频一区二区三区视频 | 午夜精品一区二区三区四区 | 综合色站导航 | av综合站 | 一级淫片在线观看 | 韩国精品在线 | 日韩无在线 | 亚洲人xxx| 四虎在线观看精品视频 | 97超碰在线视 | 精品国产一区二区三区噜噜噜 | 欧美日产一区 | 丰满少妇在线观看资源站 | 深爱婷婷网 | 久久精品一区二区三区四区 | 国产成人精品免费在线观看 | 激情欧美日韩一区二区 | 亚洲精品视频在线看 | 久久久久久久久久久久99 | 午夜精品久久久久久久99无限制 | 四虎国产精品免费观看视频优播 | 超碰九九 | 黄色av高清 | 精品理论片 | 国产97免费 | 国产精品一区免费在线观看 | 久久国产手机看片 | 国产精品久久久久久妇 | 国产精品成人自拍 | 久久免费大片 | 99在线视频精品 | 日韩综合一区二区三区 | 天天草综合 | 人人澡视频 | 久久国产经典视频 | 久久综合色一综合色88 | 国产淫片免费看 | 久草网视频在线观看 | 日韩欧美91 | 久久综合九色综合网站 | 亚洲人成人在线 | 日韩一级电影在线观看 | 日韩素人在线观看 | 久热精品国产 | 久久精品影视 | 操操操com | 免费三级黄色片 | 亚洲三级影院 | 在线观看视频精品 | 亚洲精品视频在线 | 亚洲在线视频播放 | 日韩精选在线观看 | av黄色在线 | 国产精品久久久久久电影 | 在线观看成人福利 | 伊人久久在线观看 | 有码中文字幕在线观看 | 久久久综合九色合综国产精品 | 91网站免费观看 | 亚洲欧美日本一区二区三区 | 欧美少妇bbwhd | 国产在线不卡精品 | 久久手机视频 | 天天操天天摸天天爽 | 在线看v片| 中文字幕亚洲综合久久五月天色无吗'' | 2024av| 五月天中文在线 | 日韩免费高清 | 香蕉久草 | 97超碰影视 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 激情网站网址 | 欧美激情va永久在线播放 | 97精品国自产拍在线观看 | 公与妇乱理三级xxx 在线观看视频在线观看 | 成年人在线观看免费视频 | 日韩一级黄色av | 伊人午夜 | 国产中文字幕在线观看 | 91tv国产成人福利 | 狠狠色丁婷婷日日 | 精品99免费 | 久久综合久久久 | 综合激情网... | 91在线视频在线观看 | 久久免费视频播放 | a√天堂资源 | 久青草视频在线观看 | 国产成人性色生活片 | 日韩亚洲在线 | 黄色日本免费 | 天天操天 | 黄色亚洲 | 日韩电影在线观看一区二区 | av亚洲产国偷v产偷v自拍小说 | 久草免费电影 | 日韩视| 久久av伊人| 久久69精品 | 国产尤物在线 | 狠狠久久 | 国产精品一区二区av | a国产精品 | 久久午夜影视 | 亚洲精品男人天堂 | 久草a在线 | 亚洲精品美女 | 久久精品网站视频 | 亚洲闷骚少妇在线观看网站 | 国产精品网红直播 | 日本在线h | 日本夜夜草视频网站 | 最新日韩视频在线观看 | 久久99国产精品免费网站 | 天天爽网站 | 日韩国产欧美在线播放 | www.伊人网 | 欧美日本不卡视频 | 亚洲女人天堂成人av在线 | 综合激情网... | 亚洲欧美国产精品 | 免费看短 | 久久理论视频 | 五月开心色 | 婷婷激情站 | 99精品福利视频 | 久久久久久久久免费 | 中文字幕 欧美性 | 四虎8848免费高清在线观看 | 最近中文字幕免费大全 | 狠狠干狠狠操 | .国产精品成人自产拍在线观看6 | 日韩免费高清在线 | 亚洲精品午夜久久久久久久久久久 | 精品在线一区二区三区 | 国产亚洲精品成人av久久影院 | 在线观看视频福利 | 美女视频久久 | 日本三级久久久 | 国产四虎影院 | 精品一区二区精品 | 日韩不卡高清 | 992tv在线观看| 成人免费在线播放视频 | 人人舔人人插 | 久草精品视频在线看网站免费 | 毛片永久免费 | 欧美大jb | 国产高清在线观看 | 在线日韩精品视频 | 91视频免费| 国产真实精品久久二三区 | 久久国产精品电影 | 天天射综合网视频 | 欧美日本一二三 | 亚洲精品乱码久久久久久 | 日日操网站| 99精品视频免费看 | 中文资源在线播放 | 久久精品国产一区二区 | 国产资源在线观看 | 国产在线小视频 | 成人久久久精品国产乱码一区二区 | av黄在线播放 | 在线观看av免费 | 999久久久免费精品国产 | 亚洲女同ⅹxx女同tv | 色视频网站在线观看一=区 a视频免费在线观看 | 美女在线黄 | 美女网站视频免费黄 | 一区二区三区日韩在线观看 | 欧美三人交 | 手机在线欧美 | 免费能看的av| av蜜桃在线 | 在线精品视频免费观看 | 91香蕉视频720p | 国产成人免费观看 | 久久国产美女视频 | 亚洲精品视频在线观看视频 | 中文字幕 91 | 97在线免费 | 亚洲精品福利在线观看 | 午夜精品一区二区三区在线 | 麻豆影视在线免费观看 | 99视频网址 | 又紧又大又爽精品一区二区 | 久久久免费观看完整版 | 国产日韩欧美精品在线观看 | 97人人澡人人添人人爽超碰 | 欧美日韩高清一区二区三区 | 久久综合久久综合这里只有精品 | 狠狠色丁香久久婷婷综 | 天天综合五月天 | 亚洲传媒在线 | 亚洲春色综合另类校园电影 | 深爱激情亚洲 | 91九色成人| 韩国精品福利一区二区三区 | 97看片 | 最近中文字幕免费av | 中文字幕在线观看91 | 国产精品日韩 | 天天色综合三 | 在线观看免费福利 | 国产成人一区二区在线观看 | 亚洲国产中文字幕在线观看 | 日韩综合一区二区 | 黄色美女免费网站 | 国产午夜精品一区二区三区嫩草 | 视频一区二区精品 | 99久久精品一区二区成人 | 日韩91av| 91色综合 | 日韩午夜在线观看 | 看片一区二区三区 | 亚洲成色777777在线观看影院 | 91中文字幕网 | 国产无吗一区二区三区在线欢 | 91在线产啪 | 久久久麻豆视频 | 久久精品国产亚洲a | 91在线中文字幕 | 国产成人精品在线播放 | 国产日韩欧美在线影视 | 99国内精品久久久久久久 | 国产成人福利在线观看 | 欧亚久久 | 黄色av网站在线观看免费 | 一区二区三区四区五区在线 | 免费精品国产va自在自线 | 一区二区三区免费在线观看视频 | 国产精品欧美久久久久无广告 | 日韩成人免费在线 | 日韩v在线| 69精品视频 | 国产在线a| 国产日产精品一区二区三区四区 | 久久兔费看a级 | 成人av网页 | 97视频在线观看播放 | 国产在线精品二区 | 狠狠色狠狠色综合系列 | 亚洲欧洲精品一区二区 | 欧美日韩中文视频 | 一本色道久久精品 | 日韩在线精品视频 | 99久久一区| 精品在线免费观看 | 日韩国产欧美在线播放 | av经典在线 | 五月婷婷综合色拍 | 天天操天天拍 | 国产精品麻豆三级一区视频 | 欧美日韩一区二区在线观看 | 91在线你懂的 | 国产在线视频一区二区三区 | 久99视频 | 福利一区二区在线 | 国模精品在线 | 久久久久激情视频 | 日韩二区精品 | 国产视频一区在线 | 亚洲国产999 | av电影免费在线看 | 免费看三级网站 | 91激情视频在线 | 午夜精品视频免费在线观看 | 久草电影网 | www.夜色.com| 久草精品视频在线播放 | 日韩久久久久久 | 久草97| 欧美精品天堂 | 91九色免费视频 | 中文字幕 婷婷 | av无限看 | 91精品婷婷国产综合久久蝌蚪 | 中文一区在线观看 | 在线免费观看麻豆 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 97在线免费视频 | 免费高清在线视频一区· | av福利网址导航大全 | 久色小说 | 91大神电影 | 韩国av一区二区三区 | 国产精品精品国产色婷婷 | 在线国产一区 | 欧美日韩在线免费视频 | 精品一区免费 | 99久久精品免费看国产一区二区三区 | 亚洲最大成人免费网站 | 婷婷在线视频观看 | 麻豆91精品91久久久 | 亚洲免费精彩视频 | 亚洲精品乱码久久久久久蜜桃动漫 | 操操操com | 久久日本视频 | 天堂av观看 | www.久久色.com | 九九九在线观看 | 日韩av成人| 午夜.dj高清免费观看视频 | 国产精品久久久久婷婷二区次 | a√资源在线 | 看毛片的网址 | 国产精品久久久久久久久久了 | 色婷婷视频在线观看 | 亚洲人成网站精品片在线观看 | 最新日韩在线观看视频 | 天天干夜夜爽 | 亚洲午夜久久久久久久久 | 国产亚洲情侣一区二区无 | 成人三级黄色 | 视色网站 | 五月婷婷av| av成人资源 | 二区视频在线观看 | 91九色在线观看视频 | 六月激情久久 | 五月婷香 | 丝袜美腿一区 | 天天做天天爱夜夜爽 | 亚洲精品在线观看网站 | 色姑娘综合 | 色永久免费视频 | 久久精品观看 | 日韩大片免费观看 | 国产成人精品一区在线 | 久草国产在线观看 | 国产亚洲精品久久久久久大师 | 国产黄色大片 | 一区二区三区免费在线观看视频 | 99久久精品久久亚洲精品 | 国产一区黄色 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国产粉嫩在线观看 | 在线中文字幕观看 | 久久九九网站 | 免费日韩三级 | 天天色 天天 | 五月天伊人网 | 天天干天天草天天爽 | 国产一级片一区二区三区 | 日本黄色免费大片 | 日本激情视频中文字幕 | 亚洲综合色av | 国产婷婷久久 | 国产手机在线播放 | 十八岁以下禁止观看的1000个网站 | 免费高清在线观看电视网站 | 久久精品美女 | 国内精品视频一区二区三区八戒 | 久久精品99国产国产 | 最新日韩在线 | 亚洲精品乱码久久久久v最新版 | 日韩在线观看网址 | 欧美成人猛片 | 精品在线小视频 | 丰满少妇在线观看资源站 | 欧美成人在线免费观看 | 国产99视频在线观看 | 五月婷在线 | 网站免费黄色 | 伊人资源视频在线 | www.五月天婷婷 | 爱爱av网| 久久久久久毛片精品免费不卡 | 91porny九色在线播放 | 97超级碰碰碰视频在线观看 | 骄小bbw搡bbbb揉bbbb | 色婷婷免费视频 | 日韩中文在线观看 | 国产视频1区2区 | 91九色在线视频观看 | 在线观看精品视频 | 欧美国产日韩一区二区三区 | 中文在线免费一区三区 | 日韩综合一区二区三区 | 午夜久久影视 | 91豆麻精品91久久久久久 | 欧美看片 | 免费av福利 | 久久国产精品免费一区 | 菠萝菠萝在线精品视频 | 夜夜骑天天操 | 中文字幕电影高清在线观看 | 嫩草伊人久久精品少妇av | av高清在线观看 | 啪嗒啪嗒免费观看完整版 | 国产日韩欧美综合在线 | 精品久久久久国产 | 五月婷婷激情五月 | 在线视频观看亚洲 | 国产黄色片久久久 | 亚洲专区欧美专区 | 日韩黄在线观看 | 成人综合婷婷国产精品久久免费 | 7799av| 国产麻豆精品一区二区 | 91亚瑟视频| 天天综合视频在线观看 | 久久久精品国产一区二区电影四季 | 国产精品永久免费观看 | av网址在线播放 | 久草成人在线 | 九色一区二区 | 日韩高清一区 | av福利在线看| 国产一区二区精品 | 久久人人爽爽人人爽人人片av | 久久天天操| 国产精品久久人 | 成人午夜在线电影 | 国产91免费在线观看 | 婷婷中文字幕在线观看 | 国产在线观看免 | 久久久久久片 | 国产日韩欧美自拍 | 亚洲男男gaygay无套 | 精品一区二区视频 | 亚洲九九爱 | www.操.com| 99免费在线播放99久久免费 | www.av小说 | 久草a在线 | 天天干天天干天天干 | 在线成人一区二区 | 激情在线网| 精品亚洲va在线va天堂资源站 | 亚洲综合在线视频 | 久久精品一区二区三区国产主播 | 国产亚洲精品电影 | 不卡精品视频 | 免费观看性生活大片3 | 日本精品久久久久影院 | 久草在线国产 | 国产精品久久在线观看 | 在线观看视频在线观看 | 国产成人精品一区二区在线观看 | 91精品国产91久久久久 | 国产手机在线观看视频 | 久久久久久久久久久电影 | 亚洲毛片视频 | 国产黄色片久久 | 特级西西444www大胆高清无视频 | 你操综合 | 午夜色婷婷| 美女免费黄网站 | 日韩午夜精品福利 | 免费看成人a | 91精品网站 | 玖玖在线免费视频 | 日韩欧美综合在线视频 | 国产精品视频永久免费播放 | 国产玖玖在线 | 国产麻豆精品传媒av国产下载 | 欧美日韩成人 | 国产丝袜制服在线 | 五月黄色 | 国产精品原创av片国产免费 | 亚洲男男gaygay无套 | 成人免费观看网站 | 黄色毛片大全 | 丁香影院在线 | 一区二区 不卡 | 日韩精品久久久久久中文字幕8 | 97精品在线观看 | 在线观看视频福利 | 久久综合日 | 狠狠干.com | 中文字幕一区二区三区视频 | 狠狠色丁香婷婷综合欧美 | 视频国产在线观看18 | 精品视频一区在线 | 麻豆一区二区三区视频 | 日本乱视频 | 中文字幕 国产 一区 | 91污污 | 欧美视频网址 | 国产成人久久精品77777 | 美腿丝袜av| 免费久久99精品国产 | 欧美日韩免费一区二区三区 | 国产精品99久久久久 | 国产精品video爽爽爽爽 | 视频 天天草| 欧美性色综合网 | 日女人电影 | 亚洲在线精品 | 美女视频黄色免费 | 玖玖在线观看视频 | 91精品国产91久久久久久三级 | 午夜影院在线观看18 | 久久国产免费看 | 六月天色婷婷 | 国产日韩精品在线观看 | 91香蕉视频好色先生 | 欧美analxxxx| 亚洲不卡av一区二区三区 | 成人h电影| 国产精品久久久久久久久蜜臀 | 中文av在线免费观看 | 国产又粗又猛又色又黄视频 | 西西4444www大胆艺术 | 亚洲午夜av | 看av免费网站 | 国产91精品久久久久 | 在线播放国产一区二区三区 | 久久久久福利视频 | 成人av电影在线播放 | 麻豆视传媒官网免费观看 | 久久激情视频网 | av在线激情 | 开心激情五月网 | 日韩精品免费专区 | 欧美有色 | 99精品视频在线观看视频 | 五月天天色 | 综合网天天色 | 丝袜美腿亚洲综合 | 国产 欧美 日产久久 | 日韩精品免费在线 | 国产成人黄色 | 日韩欧美一区二区三区免费观看 | a天堂最新版中文在线地址 久久99久久精品国产 | 另类老妇性bbwbbw高清 | 国产黄色在线看 | 久久午夜国产 | 免费69视频| 精品99久久久久久 | 在线精品观看 | 国产一二三区在线观看 | 国内99视频 | 在线一二三四区 | 2022久久国产露脸精品国产 | 精品一区二区久久久久久久网站 | 2019中文最近的2019中文在线 | 91影视成人 | 国产一区二区在线免费观看 | 精品久久一区二区三区 | 中文字幕在线第一页 | 国产麻豆精品久久 | 一区二区三区国产欧美 | 久久亚洲在线 | 国产免费又爽又刺激在线观看 | 狠狠干激情 | 国产麻豆视频 | 99热这里只有精品在线观看 | 成人在线视频免费观看 | 成人va天堂 | 国产亚洲精品福利 | 国产一二区精品 | 丁香高清视频在线看看 | 一区三区视频在线观看 | 香蕉视频色 | 久操视频在线免费看 | 国产手机免费视频 | 成年人黄色免费网站 | 天天操天天操天天 | 深夜视频久久 | 日韩欧美视频二区 | 最近免费观看的电影完整版 | 久久亚洲免费视频 | 人人爽人人射 | 91精品国产麻豆国产自产影视 | 99精品在线免费观看 | 国产在线中文 | 久久高清av| 国产明星视频三级a三级点| 国产日韩欧美自拍 | 天天爱天天操天天爽 | 91av在线国产 | 婷婷丁香六月天 | 97在线视频免费观看 | 国产黄色看片 | 欧美日韩中文字幕视频 | av经典在线| 狠狠操天天操 | 亚洲最新av网址 | av动态图片 | 成人黄色电影免费观看 | 国产麻豆剧果冻传媒视频播放量 | 欧美日韩高清在线 | 激情欧美xxxx | 亚洲视频网站在线观看 | 久久久首页| 日韩电影在线观看一区 | 狠狠狠狠狠狠狠 | 亚洲 综合 精品 | 97超碰人人澡人人爱学生 | 国产精品对白一区二区三区 | 草久在线观看 | 黄色三级在线看 | 亚洲人久久久 | 99热最新精品 | 九色视频网站 | 玖玖爱国产在线 | 在线观看深夜福利 | 国产又粗又硬又爽的视频 | 黄色软件在线观看视频 | 成人午夜影院 | 三级黄色免费 | 欧美乱淫视频 | 亚洲一区日韩 | 日韩免费av在线 | 国产黄色精品网站 | 国产麻豆电影在线观看 | 99热999 | 日韩在线电影 | 中文字幕日韩在线播放 | 国产精品二区在线 | 91视频3p | 亚洲人毛片 | 欧美精品首页 | 久久综合狠狠综合久久激情 | 在线观看免费91 | 成人aⅴ视频 | 最近日本中文字幕a | 日韩黄色中文字幕 | 国产在线精品一区二区三区 | 激情网站五月天 | 亚洲国产日韩欧美在线 | 国产99精品 | 国产女人40精品一区毛片视频 | 丁香激情视频 | 伊人色综合久久天天 | 91色偷偷| 中文国产在线观看 | 美女网站在线观看 | 精品视频不卡 | 天天看天天干天天操 | 天天操天天射天天爽 | 国产精品自拍在线 | 久久国产精品色av免费看 | 91一区二区三区久久久久国产乱 | 亚洲高清网站 | 国产精品99久久久久久有的能看 | 视频在线观看99 | av短片在线| 免费av免费观看 | 在线播放日韩 | 97在线视频免费看 | 91成人精品 | 91片在线观看 | 亚洲理论电影网 | 久久国产一二区 | 中文字幕在线播放视频 | 粉嫩av一区二区三区免费 | 欧美一级片免费在线观看 | 欧美日韩在线观看不卡 | 亚洲激情视频在线 | 日本老少交 | 涩涩网站在线观看 | 精品国产aⅴ一区二区三区 在线直播av | av片中文 | 久久久91精品国产一区二区三区 | 91九色视频导航 | 国产视频第二页 | 91av视频在线播放 | 亚洲精品久久久久999中文字幕 | 最新av在线网站 | 日韩av电影中文字幕 | 亚洲理论电影 | 国产亚洲精品久久久久久电影 | 国产区在线 | 99久久这里有精品 | av一级黄| 最新婷婷色 | 久久久久免费网站 | 激情综合一区 | 国产99久久九九精品免费 | 国产午夜激情视频 | 亚洲午夜小视频 | 色综合激情网 | 国产精品国产三级国产专区53 | 天天爽夜夜爽人人爽曰av | 天天透天天插 | 久久超碰在线 | 最新中文字幕在线播放 | av看片网址| 狠狠狠色丁香综合久久天下网 | 亚洲色图27p | 亚洲91精品在线观看 | 国产精品久久一区二区无卡 | 少妇bbb好爽 | av片子在线观看 | 婷婷色综合色 | 亚洲狠狠婷婷综合久久久 | 狠狠色狠狠色综合日日92 | 五月婷婷色 | 久久精品系列 | 91麻豆免费视频 | 久久精品视频在线观看免费 | 日韩中文字幕免费在线播放 | 午夜三级毛片 | 亚洲视频999 | 国产福利不卡视频 | 91精品国产自产老师啪 | www日韩| 1区2区3区在线观看 三级动图 | 欧美一级高清片 | 午夜视频在线观看一区二区三区 | 在线观看一区二区精品 | 人人躁 | 中文字幕传媒 | 天天干天天搞天天射 | 国产精品成人免费一区久久羞羞 | 天天爽天天做 | 999久久国产 | 久操综合| 欧美极品xxxxx | 91看片淫黄大片在线播放 | 国产精品手机看片 | 波多野结衣在线观看一区二区三区 | 精品视频在线播放 | 亚洲激情六月 | 狠狠色丁香久久综合网 | 久久成人黄色 | 久久躁日日躁aaaaxxxx | 福利视频一区二区 | 日本久久久久久久久久 | 亚洲 欧洲 国产 精品 | 日韩 国产 | 成年免费在线视频 | 一性一交视频 | 亚洲国产理论片 | 久久亚洲区 | 成人a视频在线观看 | 久久黄色网页 | 久久视频在线免费观看 | 久久精品一 | 九色视频网 | 国产在线视频一区二区三区 | 国产精品午夜久久 | 五月天久久狠狠 | 国产精品九九九九九 | 国产一区二区视频在线播放 | a色网站| 蜜臀av网站| 亚洲精品国产欧美在线观看 | 日韩在线观看视频在线 | 亚洲精品一区二区三区在线观看 | 丁香婷婷激情五月 | 91观看视频 | 欧美日韩精品综合 | 日日夜夜综合网 | 国产二区视频在线观看 | 一二三区视频在线 | 超碰av在线| 国产精品一区二区三区久久 | 免费观看日韩 | 超碰免费97 | 欧美日韩视频免费 | 免费试看一区 | 久久综合丁香 | 精品国产1区2区 | 丁香六月av| a爱爱视频 | 天天爱天天射天天干天天 | 久久99精品国产麻豆宅宅 | 日本久久中文 | 2018亚洲男人天堂 | 草久在线播放 | 国产精品6 | 一区二区三区电影 | 亚洲在线不卡 | 亚洲成人av一区 | 综合色在线 | 国产成人区 | 一本一本久久a久久精品牛牛影视 | 国产成人精品一区二区在线 | 中文乱码视频在线观看 | 天堂av在线中文在线 | 久久视频免费在线观看 | 91tv国产成人福利 | 久久国色夜色精品国产 | 久久成人18免费网站 | av黄网站| 日韩最新中文字幕 | 国产精品久久久久影院 | 开心丁香婷婷深爱五月 | 182午夜在线观看 | 一级c片 | 天天色婷婷 | 亚洲精品网站 | 中文字幕在线成人 | 国产伦理一区二区 | 日韩亚洲在线观看 | av免费高清观看 | 天天插综合 | 久久影院午夜论 | 色网站在线免费 | av免费电影网站 | 日韩av中文字幕在线 | 天堂视频中文在线 | 深夜免费小视频 | 国产美女在线精品免费观看 | 1024久久 | 免费在线看成人av | 黄色动态图xx | 久久精品电影院 | 天天草夜夜 | 欧美日韩亚洲在线 | 欧美午夜精品久久久久 | 国产大片免费久久 | 久久影视一区 | 96久久精品| 日韩av影视在线观看 | 欧美亚洲一区二区在线 | 天天天综合 | 亚洲国产av精品毛片鲁大师 | 手机看片国产日韩 | 亚洲综合视频在线 | 国产精品情侣视频 | 91视频在线免费 | 中文乱码视频在线观看 | 久久综合久久综合九色 | 亚洲精品日韩av | 日韩丝袜| 国产精品99久久久精品 | 精品久久久久久久久久久久久久久久 | 国产成人av电影在线观看 | 中文一区在线 | 98超碰在线| 久久久久久久久久久免费av | 久久专区| 66av99精品福利视频在线 | 中文字幕视频一区 | 韩国在线视频一区 | 在线国产激情视频 | 免费在线色 | 久久久久国产一区二区三区四区 | 亚洲视频大全 | 日韩欧美91 | 97超碰在线免费 | 91丨九色丨蝌蚪丰满 | 天天干天天插 | 国产精品久久99综合免费观看尤物 | 久久久午夜精品理论片中文字幕 | 婷婷丁香花 | 亚洲理论视频 | 久艹在线观看视频 | 国产精品久久电影网 | 亚洲黄色成人av | aav在线 | 五月开心婷婷网 | 亚洲视频网站在线观看 | 亚洲动漫在线观看 | 日日操夜夜操狠狠操 | 99久久婷婷国产一区二区三区 | 国产精品免费一区二区三区在线观看 | 热久久国产精品 | 日日夜夜网站 | 国产精品久久久久久999 | 国产日产亚洲精华av | 国产传媒中文字幕 | 狠狠躁日日躁 | 国产精品一区二区久久 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 成人av在线亚洲 | 久久a久久 | 成人啪啪18免费游戏链接 | 97超碰成人 | 欧美一区二区免费在线观看 | 成人wwwxxx视频| 亚洲午夜久久久久久久久久久 | 91精品视频在线 | 五月天九九 | av中文在线观看 | 国产97色在线 | 国产黄色av | 精品亚洲成a人在线观看 | 日日夜操 | 久草在线资源观看 | 在线视频亚洲 | 91亚洲精品久久久蜜桃网站 | 欧美成人精品欧美一级乱黄 | 中文在线8资源库 | 日本在线精品视频 | 一区二区精品视频 | 亚洲激情在线观看 | 九九热免费在线视频 | 国产精品一区二区美女视频免费看 | www黄com| 精品久久久久久亚洲 | 日本久久免费视频 | 黄色三级久久 | 天堂av在线网站 | 四虎8848免费高清在线观看 | 国产成人精品久 | 在线免费观看视频一区二区三区 | 97超碰人人模人人人爽人人爱 | 日韩精品一区二区电影 | 激情深爱.com | 国产一级片一区二区三区 | 久久精品婷婷 | 精品久久久免费视频 | 久久伊人综合 | av一本久道久久波多野结衣 | 91女子私密保健养生少妇 | 中文字幕第一页在线 | 亚洲午夜不卡 | 美女视频黄色免费 | 久久9999久久免费精品国产 | 日韩成人不卡 | 伊人超碰在线 | 欧美成人69av| 色婷婷av一区二 | 国产日产在线观看 | 日韩精品中字 | 成人免费一区二区三区在线观看 | 99久久久久久久 | 精品久久久久久国产91 | 国产1区2 | 91av手机在线 | 97免费在线观看视频 | 超碰97成人| 97超碰福利久久精品 | 久久国产精品免费 | 午夜.dj高清免费观看视频 | 99久久精品国产一区二区三区 | www.天天色.com| 成人中文字幕+乱码+中文字幕 | 亚洲欧美激情精品一区二区 | 成人福利在线 | 国产成人av网 | 国产又粗又硬又长又爽的视频 | 日韩欧美视频一区二区三区 | www·22com天天操 | 人人添人人澡人人澡人人人爽 | 日日爽日日操 | 国产网站色| 伊人伊成久久人综合网小说 | 在线免费观看黄色小说 | 中文av在线播放 | 成人在线观看影院 | 在线观看自拍 | 欧美亚洲成人免费 | 日韩资源在线 | av不卡网站 | 91亚瑟视频 | 欧美精品久久人人躁人人爽 | 欧美日韩国产一区二区三区 | 婷婷六月色 | 色黄视频免费观看 | 国产区av在线 | 国产精品免费在线播放 | 国产精品wwwwww| 久久艹99| 色999五月色| 国精产品一二三线999 | 国产二区视频在线观看 | 日韩av片免费在线观看 | 久艹视频免费观看 | 精品国产区 | 91精品一区在线观看 | 国产日韩av在线 | 国产精品久久久久久爽爽爽 | 国产成人高清 | 精品视频免费 | 麻豆精品传媒视频 | 超碰在线观看99 | 久久视了 | 欧美日韩国产一二三区 | 国产精品丝袜久久久久久久不卡 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 五月婷婷综 | 麻豆视频免费在线 | 精品日本视频 | 欧美日韩免费观看一区=区三区 | 久草在线高清 | 日本午夜在线亚洲.国产 | 亚洲热久久 | 久久国产精品99久久久久久老狼 | 免费日韩 精品中文字幕视频在线 | 在线视频观看亚洲 | 久草在线观 | 玖玖在线视频观看 | 97操碰 | 国产成人综合图片 |