<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-42  評論-578  文章-1  trackbacks-0

    群里有朋友求解一個問題,高分求一條HQL多對多查詢語句 。

    問題描述見 http://topic.csdn.net/u/20090621/16/4eac6fe0-bf3e-422e-a697-f7584732f66e.html,摘要如下:

    一個學科表(Field),一個用戶表(User),多對多關系。 
    學科表有兩個字段,id和descripiton,用戶表有眾多字段,不羅列了 
    Field中有SET集合users 
    User中有SET集合fields 
    現在要查掌握id like '
    520%'的女性用戶 
    我這樣寫的: 
    from User u
    ,Field f where u.gender='m' in (select f.users from Field where f.id like '520%') 
    持續報錯! 


    我的項目代碼中恰好有一個多對多的關聯映射的類:User(用戶)和Role(角色),其中,User類中有roles集合,而Role類中有users集合。我用我的代碼測試了一番。

    首先寫了下面這句:

    select user from User user where user.sex='男' and user in (select role.users from Role role where role.id>5)

    這樣不行,報錯。原因是,Hibernate的HQL語句中的“in條件”句如:x  in(‘a’,’b’,’c’),要求的是x是(‘a’,’b’,’c’)中的一個元素,而select role.users這樣查出來的是集合的集合,它內部的元素應該是一個集合:set<user> in (select role.users…),而不是一個對象: user in (select role.users…)。

    可惜的是HQL語句沒有set<user> in (select role.users….)這樣的子句,后來,查了一下Hibernate的參考文檔,得到解決方法。原來,Hibernate的HQL語句中的“in條件”中,可加入”elements”關鍵詞,即上面的查詢語句變成:

    select user from User user,Role role where user.sex='男' and user in elements(role.users) and role.id>5

    這樣就行了。

    不過還有一個小問題,就是這樣查詢出來,會出現許多重復記錄,原因是查詢出的每一個符合的role后,會通過role.getUsers()查出users集合,這樣,當然就可能出現有幾個role擁有相同的user的現象。很容易解決,加多一個“distinct ”關鍵詞就行。

    select distinct  user from User user,Role role where user.sex='男' and user in elements(role.users) and role.id>5

    好了,解決了。那位CSDN中的朋友提的問題也解決了,它的hql語句如下:

    select distinct u from User u,Field f where u.gender='m' and u in elements(f.users) and f.id like '520%'



    本文原創,轉載請注明出處,謝謝!http://www.tkk7.com/rongxh7(心夢帆影JavaEE技術博客)
        

    posted on 2009-06-21 20:11 心夢帆影 閱讀(12090) 評論(4)  編輯  收藏 所屬分類: Hibernate

    評論:
    # re: Hibernate多對多關聯映射的HQL中的in條件查詢問題 2009-06-22 15:28 | 123
    select USER_ROLE_TABLE ur where ur.user.sex='女' and ur.role.id like
    '520%'  回復  更多評論
      
    # re: Hibernate多對多關聯映射的HQL中的in條件查詢問題 2009-06-23 10:10 | 找個美女做老婆
    Java樂園交流學習社區: http://www.javaly.cn

    QQ群:28840096  回復  更多評論
      
    # re: Hibernate多對多關聯映射的HQL中的in條件查詢問題 2009-07-04 16:03 | dikar
    select distinct user
    from (
    select user
    from User user
    where user.sex='男'
    ) tempUser , Role role
    where role.id>5
    and tempUser.id=role.user.id

    其實一般情況下的in最好用臨時表的思想替換掉 ,然后連接的字段最好是有索引的  回復  更多評論
      
    # re: Hibernate多對多關聯映射的HQL中的in條件查詢問題 2014-01-07 14:41 | 瀏覽
    這篇文章幫了大忙,謝謝  回復  更多評論
      
    主站蜘蛛池模板: 99视频在线免费看| 久久久久久亚洲精品中文字幕| a级片免费在线观看| 亚洲av永久无码精品三区在线4| 亚洲精品亚洲人成在线观看下载| 黄在线观看www免费看| 国产高清对白在线观看免费91| 亚洲性无码一区二区三区| 亚洲AV无码一区二区二三区软件 | 我的小后妈韩剧在线看免费高清版| 免费播放国产性色生活片| 亚洲av极品无码专区在线观看 | 亚洲黄片手机免费观看| 亚洲综合一区国产精品| 亚洲激情在线视频| 亚洲色成人网站WWW永久| 免费一级大黄特色大片| 毛片a级毛片免费播放100| 真实国产乱子伦精品免费| 大地影院MV在线观看视频免费 | 啦啦啦完整版免费视频在线观看| 老司机福利在线免费观看| 亚洲欧美日韩自偷自拍| 亚洲成AV人综合在线观看| 亚洲人成在线影院| 亚洲av无码成人黄网站在线观看| 国产亚洲日韩在线三区| 国产成人亚洲精品91专区手机| 国产精品免费看久久久久| 天天拍拍天天爽免费视频| 久久久久久99av无码免费网站| 69视频在线是免费观看| 99精品视频免费观看| 久久久久免费精品国产小说| 97无码人妻福利免费公开在线视频| 一本久久免费视频| 又黄又大的激情视频在线观看免费视频社区在线 | 日韩精品免费一线在线观看| 国产精品自拍亚洲| 黄页免费视频播放在线播放| 国产成人亚洲精品91专区高清|