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

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Hibernate Criteria 多層次查詢關聯問題

系統 1769 0

轉載,收藏一下!

?

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

hibernate 存在如下表及關聯:

Java代碼 復制代碼
  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外鍵關聯Pisition, Position外鍵關聯Shelf, Shelf外鍵關聯houseid。
現在要對Warehouse使用Criteria查詢, 查詢House的id,可使用如下方法:

Java代碼 復制代碼
  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, 必須再關聯House表:

Java代碼 復制代碼
  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"));

  


以上代碼就可以實現了。

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

Java代碼 復制代碼
  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 都能轉換為CriteriaImpl,可能會是Subcriteria。因此,需要確保傳入的參數為CriteriaImpl)

調用代碼就變成:

Java代碼 復制代碼
  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 多層次查詢關聯問題


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天插天天干天天操 | 波多野结衣中文无毒不卡 | 久久这里有精品 | 国产福利视频一区 | 免费观看a黄一级视频 | 在线亚洲欧美性天天影院 | 综合精品在线 | 老司机永久免费视频 | 久久久久久国产精品mv | 91新视频| 嫩模一区 | 亚洲欧美综合 | 国产亚洲精品91 | 深夜精品影院18以下勿进 | 亚洲综合区小说区激情区噜噜 | 久久精品久久精品国产大片 | 亚洲视频在线网 | 亚洲一一在线 | 麻豆成人久久精品二区三 | 国产精品中文字幕在线 | 亚洲免费播放 | 看看免费a一片欧 | 欧美日韩视频在线播放 | 精品在线播放 | 国产综合久久一区二区三区 | 国产男女猛视频在线观看网站 | 日韩黄色大片免费看 | 狠狠婷| 亚洲精品国产啊女成拍色拍 | 97影院理论 | 鲁鲁狠色综合色综合网站 | 国产成人精品精品欧美 | 亚洲欧美日韩成人一区在线 | 伦伦影院精品一区 | 99热视屏 | 99精品视频在线观看免费专区 | 黄色综合网 | 黄色影院在线看 | 久久精品国产日本波多麻结衣 | 日韩一区二区三区在线视频 | 久久精品国产福利国产秒 |