總結DetachedCriteria級聯查…
原文地址:總結DetachedCriteria級聯查詢作者:夢裡花落
如果實體物件中沒有關聯物件的情況使用DetachedCriteria進行查詢是一件很簡單的事情。
如果實體物件中含有OneToOne或者ManyToOne關聯物件的情況可以參考下面方式,使用別名:
假設要通過stuName查詢一個學生Student記錄,可以如下:
Java程式碼
- DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
- dc.add(Restrictions.like("stuName", stuName, MatchMode.ANYWHERE));
如果要通過Student的Team的teamName查詢一個Student記錄,很多人都會這麼寫:
Java程式碼
- DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
- dc.add(Restrictions.like("team.teamName", teamName, MatchMode.ANYWHERE));
遺憾的是上述程式報錯,說是在Student中找不到team.teamName屬性,這是可以理解的。那麼如何通過teamName查詢Student呢?
可以這麼寫:
Java程式碼
- DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
- dc.createAlias("team", "t");
- dc.add(Restrictions.like("t.teamName", teamName, MatchMode.ANYWHERE));
沒錯,就是要先建立team的引用,才能用team導航到teamName。
這裡有一個特殊情況,如果是對引用物件的id查詢,則可以不用建立引用,也就是可以不呼叫createAlias()語句,如下所示:
Java程式碼
- DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
- dc.add(Restrictions.like("team.id", teamId, MatchMode.ANYWHERE));
據我個人的經驗,team後只能跟其主鍵屬性,比較其他屬性要用別名。此主鍵屬性可以用“id”字元來指代,也可以用team的主鍵屬性來指代。換句話說,我的Student類的類主鍵“stuId”,不管是在HQL還是在QBC中,都可以用stu.id來指代stu.stuId。在這裡可以看出
“id”字元的特殊性。上述是個人觀點,並未得到確實的證實。
補充:
如果是三級或更多級查詢怎麼辦?
以三級查詢為例,仍引用上面的例子:
Java程式碼
- DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
- dc.createAlias("team", "t");
- dc.createAlias("t.school", "s");
- dc.add(Restrictions.like("s.schoolName", schoolName,
MatchMode.ANYWHERE));
設定返回ROOT物件
detachedCriteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
相關文章
- 求助:DetachedCriteria關聯查詢問題~~
- hibernate 動態查詢(DetachedCriteria )
- Hierarchical Queries 級聯查詢(樹狀結構查詢)
- 聯考總結
- 關聯物件總結物件
- Hibernate之DetachedCriteria、Criteria
- MySQL聯結查詢和子查詢MySql
- EasyUI Combobox 級聯查詢UI
- MongoDB查詢總結MongoDB
- SQL查詢總結SQL
- 模型關聯使用總結模型
- 如何實現引數級聯查詢
- 程式碼走查總結
- noip多校聯考總結
- YourSQLDba版本升級總結SQL
- 特色班級活動總結
- 升級手冊總結
- 【專案問題總結】5:樹形結構節點的級聯刪除邏輯
- Vue+Element 單選模式下Cascader級聯選擇器使用總結Vue模式
- MyBatis(六) sql片段定義、級聯查詢、巢狀查詢MyBatisSQL巢狀
- 並查集(UnionFind)技巧總結並查集
- 並查集應用總結並查集
- 提高查詢速度方法總結
- SQL總結(一)基本查詢SQL
- SQL總結(三)其他查詢SQL
- 典型關聯分析(CCA)原理總結
- 6.25 之後的聯考總結
- 10.8日noip聯考總結
- 10.17noip聯考總結
- 無限分級 方法總結
- HTTPS入門級總結HTTP
- 升級_知識點總結
- HBase二級索引方案總結索引
- SQL -- 使用聯結還是子查詢?SQL
- Spring Data Jpa 複雜查詢總結 (多表關聯 以及 自定義分頁 )Spring
- MySQL查詢結果匯出方式總結MySql
- Mybatis 查詢語句結果集總結MyBatis
- 【軟體實施面試】MySQL和Oracle聯合查詢以及聚合函式面試總結面試MySqlOracle函式