關於HQL Criteria Restrictions.eq 兩表關聯和三表關聯查詢分析總結筆記
阿新 • • 發佈:2019-01-23
兩表關聯
TBorrow表和TUser表關聯ID查詢,依據 <many-to-one name="TUserByAdminId" class="com.shop.model.TUser" fetch="select">
以上測試通過! 三表關聯 如果一次類推, 依據 <many-to-one name="TBookOfBorrow" class="com.shop.model.TBook" fetch="select"> <many-to-one name="TBaserefByBookGrade" class="com.shop.model.TBaseref" fetch="select"> 一次類推
執行出錯,可見Restrictions無法三表分析,通過測試得到,Restrictions僅僅只能得到關聯表的ID值,英雌為了實現三表查詢,改進查詢語句,得到如下程式碼
拆分標的查詢成功執行,得到所需的結果。2013/7/29 0:04 今天早上通過上網瀏覽和查詢API,終於找到了更簡單的方法,在此記下來 Alias 別名 criteria的子查詢考這個來完成。包括LEFT_JOIN,INNER_JOIN,FULL_JOIN 所以以上想實現TBookOfBorrow.TBaserefByBookCategory.id只要給其中的一個去一個別名就行 如 TBookOfBorrow --> t t.TBaserefByBookCategory.id 這樣就行了 同樣,通過表的其他欄位來查詢也需要這個方式 上面程式碼改成:
- DetachedCriteria criteria = DetachedCriteria.forClass(TBorrow.class);
- criteria.add(Restrictions.eq("TUserByBorrowPeopleId.id", user));
- getHibernateTemplate().findByCriteria(criteria)或criteria.list()
以上測試通過! 三表關聯 如果一次類推, 依據 <many-to-one name="TBookOfBorrow" class="com.shop.model.TBook" fetch="select"> <many-to-one name="TBaserefByBookGrade" class="com.shop.model.TBaseref" fetch="select"> 一次類推
- DetachedCriteria criteria = DetachedCriteria.forClass(TBorrow.
- criteria.add(Restrictions.eq("TBookOfBorrow.TBaserefByBookCategory.id", user));
- getHibernateTemplate().findByCriteria(criteria)或criteria.list()
執行出錯,可見Restrictions無法三表分析,通過測試得到,Restrictions僅僅只能得到關聯表的ID值,英雌為了實現三表查詢,改進查詢語句,得到如下程式碼
- DetachedCriteria criteria = DetachedCriteria.forClass(TBorrow.
- Session session=getSession();
- List<Integer> list=new ArrayList<Integer>();
- List<TBook> tBooks=session.createCriteria(TBook.class).add(Restrictions.eq("TBaserefByBookCategory.id", category)).list();
- list.add(tBooks.get(i).getId());
- criteria.add(Restrictions.in("TBookOfBorrow.id"
- getHibernateTemplate().findByCriteria(criteria)或criteria.list()
拆分標的查詢成功執行,得到所需的結果。2013/7/29 0:04 今天早上通過上網瀏覽和查詢API,終於找到了更簡單的方法,在此記下來 Alias 別名 criteria的子查詢考這個來完成。包括LEFT_JOIN,INNER_JOIN,FULL_JOIN 所以以上想實現TBookOfBorrow.TBaserefByBookCategory.id只要給其中的一個去一個別名就行 如 TBookOfBorrow --> t t.TBaserefByBookCategory.id 這樣就行了 同樣,通過表的其他欄位來查詢也需要這個方式 上面程式碼改成:
- DetachedCriteria criteria = DetachedCriteria.forClass(TBorrow.class);
- criteria.createAlias("TBookOfBorrow", "t");
- criteria.add(Restrictions.eq("t.TBaserefByBookCategory.id", category));
- getHibernateTemplate().findByCriteria(criteria)或criteria.list()