1. 程式人生 > >關於HQL Criteria Restrictions.eq 兩表關聯和三表關聯查詢分析總結筆記

關於HQL Criteria Restrictions.eq 兩表關聯和三表關聯查詢分析總結筆記

兩表關聯 TBorrow表和TUser表關聯ID查詢,依據 <many-to-one name="TUserByAdminId" class="com.shop.model.TUser" fetch="select">
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.class);
criteria.add(Restrictions.eq("TBookOfBorrow.TBaserefByBookCategory.id", user));
getHibernateTemplate().findByCriteria(criteria)或criteria.list()

執行出錯,可見Restrictions無法三表分析,通過測試得到,Restrictions僅僅只能得到關聯表的ID值,英雌為了實現三表查詢,改進查詢語句,得到如下程式碼
DetachedCriteria criteria = DetachedCriteria.forClass(TBorrow.class);
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",list));
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()


相關推薦

關於HQL Criteria Restrictions.eq 關聯關聯查詢分析總結筆記

兩表關聯 TBorrow表和TUser表關聯ID查詢,依據 <many-to-one name="TUserByAdminId" class="com.shop.model.TUser" fetch="select"> DetachedCriteria cr

關於HQL Criteria Restrictions.eq 關聯關聯查詢分析總結筆記

兩表關聯 TBorrow表和TUser表關聯ID查詢,依據 <many-to-one name="TUserByAdminId" class="com.shop.model.TUser" fetch="select"> DetachedCriteria

Oracle 獲取某個的所有列名

from select round gpo col class log nbsp key 獲取某用戶下所有的表名: select table_name from user_tables order by table_name; 獲取某用戶下某個表的所有列名 where

17-2 orm單操作操作

修改 rst and 默認 div tinc start 去掉 nta 參考:https://www.cnblogs.com/liwenzhou/p/8660826.html 一 ORM單表操作 1 增刪改查 1 1. 查詢 2 1. 查所有 3 models.P

SpringMVCHTML

SpringMVC表單和HTML表單 HTML表單 編寫action,返回adduser.jsp @RequestMapping(value = "/addUser",method = RequestMethod.GET) public String ad

PowerDesigner顯示漢字英文

選單->Tool->Model Options->Name Convention->右側display中選擇顯示name還是code。 不支援同時顯示,但可以選擇顯示code,然後將name填入stereotype中,變相同時顯示。 設定stereotype顯

easyui form.restclear 重置清除單資料區別

easyui中的一般我們在新增和編輯的時候 都是用一個form表單 那新增的時候 需要重置下表單內容,一般用 $('#EditForm').form('reset'); 大部分時候沒問題,但是如果表單中有隱藏控制元件 hidden或者非easyui標記的input控制

laravel 一關聯,二關聯,通過一controller拿數據

bus eid con type new spa nat reac col model 一表關聯二表 public function ordercode() { return $this->hasOne(\App\Models\OrderCo

CSS 欄佈局欄佈局

兩欄佈局 基礎部分的程式碼: <div class="container"> <div class="left">left</div> <div class="right">right</div>

SQLserver 聯查及聯查 種方法

列表內容 –合同表顯示 跟使用者表聯查 SELECT * FROM dbo.Contract SELECT h.Contract_id,h.Contract_Name,y.NetName,h.Contract_Money,h.Contract_T

SpringMVC 完美解決PUT請求引數繫結問題(普通檔案單)

一 解決方案 修改web.xml配置檔案 將下面配置拷貝進去(在原有的web-app節點裡面配置 其它配置不變) <!-- 處理PUT提交引數(只對基礎表單生效) --> <filter> <filter-name>httpPutFormContentFilter

oracle建立臨時空間資料空間以及刪除

-----建立臨時表空間----- create temporary tablespace zhangmingchaotemp tempfile 'd:\oracle\zhangmingchaotemp.dbf' -----初始化大小----- size 50m

Android-LayoutInflater中inflate方法個引數個引數的區別

關於inflate引數問題,我想很多人多多少少都瞭解一點,網上也有很多關於這方面介紹的文章,但是枯燥的理論或者翻譯讓很多小夥伴看完之後還是一臉懵逼,so,我今天想通過三個案例來讓小夥伴徹底的搞清楚這個東東。本篇部落格我們不講原始碼,只看使用。原始碼的解讀會在下一篇博文中帶

個案例帶你看懂LayoutInflater中inflate方法個引數個引數的區別

關於inflate引數問題,我想很多人多多少少都瞭解一點,網上也有很多關於這方面介紹的文章,但是枯燥的理論或者翻譯讓很多小夥伴看完之後還是一臉懵逼,so,我今天想通過三個案例來讓小夥伴徹底的搞清楚這個東東。本篇部落格我們不講原始碼,只看使用。原始碼的解讀會在下一篇博文中帶來。

js中個等號(==)個等號(===)的區別

js中兩個等號(==)和三個等號(===)的區別: 1. "=="表示:equality -> 等同  的意思,"=="使用兩個等號時,如果兩邊值的型別不同的時候,是要先先進行型別轉換後,才能做比較。 2. "==="表示:identity -> 恆等 的意思,

單鏈應用舉例(單鏈A單鏈B的元素都是非遞減排列,利用單鏈的基本運算,將它們合併成一個單鏈C,要求C也是非遞減序列)

標頭檔案:函式的定義 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <string.h> typedef int ElemType; t

hive中管理(內部外部的區別是什麼,及分割槽使用場景

⑴區別: ①Hive建立內部表時(預設建立內部表),會將資料移動到資料倉庫指向的路徑;建立外部表(需要加關鍵字external),僅記錄資料所在的路徑,不對資料的位置做任何改變; ⑵Hive刪除表時,內部表的元資料和資料會被一起刪除,而外部表只刪除元資料,不刪除資料;

JS/JavaScript中個等號 == 個等號 === 的區別

JavaScript中兩個等號 == 和 三個等號 === 的區別 一、概念 == 和 ===  (1)  "=="叫做相等運算子,"==="叫做嚴格運算子。 (2) ==,equalit

SQL Server 變數臨時系列之概念篇

問題引入 “菜鳥啊,最近我看到阿里雲開發者論壇的資料庫RDS中有人在提SQL Server表變數和臨時表如何選擇的問題,你去深入探討下這個問題吧,解答解答他們的疑惑吧”,老鳥又開始為菜鳥找活幹了。 “鳥哥啊,關於表變數和臨時表使用選擇的問題啊,向來行業裡爭論不休,我比較

Oracle的臨時空間UNDO空間對應的檔案丟失後的處理

資料庫的臨時檔案和undo檔案不需要做備份,丟失後可以恢復,資料不會有丟失. 一,臨時表空間的檔案丟失後,在資料庫啟動後自動建立,不需要做干預. 模擬:在資料庫shutdown後將臨時檔案刪除,啟動的時候發現自動建立. 二,undo表空間對應的檔案丟失. 模擬:在資料庫sh