hibernate SQLQuery實踐指南

2021-09-01 08:39:47 字數 2076 閱讀 5911

hibernate sqlquery實踐指南

兩個表(實體), 1對多雙向關聯:

班級: clazz (id, name)

學生: student(id, name , class_id)

1. 查詢持久化物件  

1.1 簡單查詢,返回資料庫結構

sql = select c.* from clazz c,student s where s.class_id = c.id";  

list clazzs = (list)session.createsqlquery(sql).list();

特別注意:返回結果是object組成的list,通過object下標訪問屬性

使用場合:非基於物件的查詢,複雜查詢

1.2 簡單查詢,返回持久化物件

sql = select c.* from clazz c , student s where s.class_id =

c.id ";    list clazzs = (list)

session.createsqlquery(sql).addentity(clazz.class).list();

特別注意: 1.addentity方法指定返回包含clazz物件的list 2. 查詢出來的持久態物件,clazz物件的studets屬性是各**物件,訪問的時候才會去查詢db 使用場合:基於物件的查詢,但物件簡單查詢

1.3 多表查詢,返回多個實體

string sql = select , from clazz c , student s where s.class_id = c.id;

list clazzs = (list) session().createsqlquery(sql)

.addentity("c", clazz.class)

.addentity("s", student.class).list();

特別注意:   

1. addentity方法指定了當前返回實體的別名,而且在sql語句裡使用這樣的語句,   它的意思是向別名為c的這個物件注入所有屬性值.

特別注意:

1. addentity方法指定了當前返回實體的別名,而且在sql語句裡使用這樣的語句,

它的意思是向別名為c的這個物件注入所有屬性值.

2. 這個查詢會返回乙個object的list,每個object包含兩個物件乙個clazz,乙個student

3. {}佔位符裡是物件的屬性,而非列名,如,而非

4. 必須注入物件的每個屬性值,你可以使用,或者手工寫全所有,但必須是所有屬性。(這個太讓我鬱悶了。 

使用場合:基於物件的查詢,複雜查詢 

1.4  多表查詢,返回關聯實體

string sql = "select , from clazz c , student s where s.class_id = c.id   ";

list clazzs = (list) session().createsqlquery(sql)

.addentity("c", clazz.class)

.addjoin("s", "c.students").list();

特別注意: 這塊有些問題,明明應該返回clazz的list的,但確返回包含clazz和student的object的list, faint使用場合:基於物件的查詢,複雜查詢 

2. 查詢託管物件

string sql = "select c.id, c.name from clazz c , student s where s.class_id = c.id";  

list clazzs = (list) session.createsqlquery(sql)     

.addscalar("id", hibernate.long)

.addscalar("name", hibernate.string)    

.setresulttransformer(transformers.aliastobean(clazz.class)).list();

特別注意:

1. 如果不設定addscalar方法可能會報轉型錯誤的異常.

2.託管查詢可以使用投影,只查詢指定的列屬性

hibernate SQLQuery實踐指南

兩個表 實體 1對多雙向關聯 班級 clazz id,name 學生 student id,name class id 1.1 簡單查詢,返回資料庫結構 view plain copy to clipboard print?sql?select?c.from?clazz?c,student?s?wh...

hibernate SqlQuery查詢字段對映

如果使用原生sql語句進行query查詢時,hibernate是不會自動把結果包裝成實體的。所以要手動呼叫addentity classclass 等一系列方法。如session.createsqlquery sql addentity classclass 注意hibernate3.0.5不支援,...

Linux系統命令及Shell指令碼實踐指南筆記

系統執行級別 執行級0 關機 執行級1 單使用者模式,系統出現問題時可使用這種模式進入系統維護,典型的使用場景 就是在忘記root密碼時可進入次模式修改root密碼。執行級2 多使用者模式,但是沒有網路連線。執行級3 完全多使用者模式,這也是linux伺服器最常見的執行級。執行級4 保留未使用。執行...