多層次查詢關(guān)聯(lián)問題(轉(zhuǎn))"alt="復(fù)制代碼"src="http://img.it610.com/image/product/81c56edbb6ee41769243cc4d4229b754.gif"width="1"height="1"/>classHouse{privatestr" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Hibernate Criteria 多層次查詢關(guān)聯(lián)問題

系統(tǒng) 1622 0

轉(zhuǎn)載,收藏一下!

?

http://terrencemail.javaeye.com/blog/197821

hibernate 存在如下表及關(guān)聯(lián):

Java代碼 復(fù)制代碼
  1. class ?House{ ??
  2. ?? private ?string?houseid; ??
  3. ?? private ?string?housename; ??
  4. } ??
  5. class ?Shelf{ ??
  6. ?? private ?string?shelfid; ??
  7. ?? private ?House?house; ??
  8. } ??
  9. class ?Position{ ??
  10. ?? private ?string?positionid; ??
  11. ?? private ?Shelf?shelf; ??
  12. } ??
  13. class ?Warehouse{ ??
  14. ?? private ?string?warehouseid; ??
  15. ?? private ?Position?position; ??
  16. }??
    class House{ private string houseid; private string housename; } class Shelf{ private string shelfid; private House house; } class Position{ private string positionid; private Shelf shelf; } class Warehouse{ private string warehouseid; private Position position; }

  


Warehouse外鍵關(guān)聯(lián)Pisition, Position外鍵關(guān)聯(lián)Shelf, Shelf外鍵關(guān)聯(lián)houseid。
現(xiàn)在要對Warehouse使用Criteria查詢, 查詢House的id,可使用如下方法:

Java代碼 復(fù)制代碼
  1. Criteria?criteria?=?BaseUtil.getCriteria(Warehouse. class ); ??
  2. criteria.createAlias( "position" ,? "position" ); ??
  3. criteria.createAlias( "position.shelf" ,? "shelf" ); ??
  4. criteria.add(expression_r.eq( "shelf.house.houseid" ,? "111" ));??
    Criteria criteria = BaseUtil.getCriteria(Warehouse.class); criteria.createAlias("position", "position"); criteria.createAlias("position.shelf", "shelf"); criteria.add(expression_r.eq("shelf.house.houseid", "111"));

  


如果要查詢House的name, 必須再關(guān)聯(lián)House表:

Java代碼 復(fù)制代碼
  1. Criteria?criteria?=?BaseUtil.getCriteria(Warehouse. class ); ??
  2. criteria.createAlias( "position" ,? "position" ); ??
  3. criteria.createAlias( "position.shelf" ,? "shelf" ); ??
  4. criteria.createAlias( "shelf.house" ,? "house" ); ??
  5. criteria.add(expression_r.eq( "house.housename" ,? "name?A" ));??
    Criteria criteria = BaseUtil.getCriteria(Warehouse.class); criteria.createAlias("position", "position"); criteria.createAlias("position.shelf", "shelf"); criteria.createAlias("shelf.house", "house"); criteria.add(expression_r.eq("house.housename", "name A"));

  


以上代碼就可以實(shí)現(xiàn)了。

可是還會出現(xiàn)一個問題:如果表路徑position已經(jīng)被關(guān)聯(lián)過了(比如此criteria是傳入的參數(shù),已經(jīng)關(guān)聯(lián)了Alias路徑position, 并查詢過了),則會報(bào)錯。解決方法:
檢查criteria里面關(guān)聯(lián)的路徑,如果已經(jīng)關(guān)聯(lián),則不再關(guān)聯(lián),直接使用就行了。

Java代碼 復(fù)制代碼
  1. class ?CriteriaUtil{ ??
  2. public ? static ?Criteria?addAlias(CriteriaImpl?criteriaImpl,?String?path,?String?name){ ??
  3. ?? if (path?==? null )? return ?criteriaImpl; ??
  4. ?? for (Iterator?iter?=?criteriaImpl.iterateSubcriteria();iter.hasNext();){ ??
  5. ????Subcriteria?subCriteria?=?(Subcriteria)iter.next(); ??
  6. ???? if (path.equals(subCriteria.getPath())) ??
  7. ?????? return ?criteriaImpl; ??
  8. ??} ??
  9. ?? return ?criteriaImpl.createAlias(path,?name); ??
  10. } ??
  11. }??
    class CriteriaUtil{ public static Criteria addAlias(CriteriaImpl criteriaImpl, String path, String name){ if(path == null) return criteriaImpl; for(Iterator iter = criteriaImpl.iterateSubcriteria();iter.hasNext();){ Subcriteria subCriteria = (Subcriteria)iter.next(); if(path.equals(subCriteria.getPath()))
                  

  


(注:這段代碼有時是存在問題的,不是所有的Criteria 都能轉(zhuǎn)換為CriteriaImpl,可能會是Subcriteria。因此,需要確保傳入的參數(shù)為CriteriaImpl)

調(diào)用代碼就變成:

Java代碼 復(fù)制代碼
  1. Criteria?criteria?=?BaseUtil.getCriteria(Warehouse. class ); ??
  2. CriteriaUtil.addAlias((CriteriaImpl)criteria,? "position" ,? "position" ); ??
  3. CriteriaUtil.addAlias((CriteriaImpl)criteria,? "position.shelf" ,? "shelf" ); ??
  4. criteria.add(expression_r.eq( "shelf.house.houseid" ,? "111" ));?

Hibernate Criteria 多層次查詢關(guān)聯(lián)問題


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美大黄 | www.yw193.com| 亚洲人成亚洲人成在线观看 | 91成人精品 | 国产在线观看福利片 | 国产精品色 | 性福演算法 | 闲人综合网 | 国产高清在线视频 | 91高清在线成人免费观看 | 啊啊啊好紧好爽 | 在线观看视频一区二区 | 久久青| 国产精品久久久久一区二区 | 欧美99 | 97超精品视频在线观看 | 污污成人一区二区三区四区 | 欧美日韩国产中文字幕 | 看特级毛片 | 久久国内精品 | 涩色婷婷狠狠第四四房社区奇米 | 亚洲欧美日韩一区二区 | 色天天爱天天狠天天透 | 青青草娱乐视频 | 日韩精品极品视频在线观看免费 | 黄色电影在线免费观看 | 欧美日韩国产综合视频在线看 | 欧美日韩国产综合网 | 成人性爱视频在线观看 | 国产高清在线精品免费 | 中文字幕一区在线观看视频 | hdbbwsexvideo| 久久se精品一区精品二区 | 色综合久久88色综合天天 | 91在线播放免费不卡无毒 | 国产成人精品三级 | 亚洲日本中文字幕 | 国产免费麻豆 | 性欧美精品久久久久久久 | 久久九九99热这里只有精品 | 日韩国产无矿砖一线二线图 |