get() and load() session
get(Clazz
id);
session
load(Clazz
id);
說明: load()與get()的區別
請注意如果沒有匹配的數據庫記錄
load()方法可能拋出無法恢復的異常(unrecoverable exception)
如果類的映射使用了代理(proxy)
load()方法會返回一個未初始化的代理
直到你調用該代理的某方法時才會去訪問數據庫
若你希望在某對象中創建一個指向另一個對象的關聯
又不想在從數據庫中裝載該對象時同時裝載相關聯的那個對象
那麼這種操作方式就用得上的了
如果為相應類映射關系設置了batch
size
那麼使用這種操作方式允許多個對象被一批裝載(因為返回的是代理
無需從數據庫中抓取所有對象的數據)
如果你不確定是否有匹配的行存在
應該使用get()方法
它會立刻訪問數據庫
如果沒有對應的行
會返回null
HQL // 返回一行記錄
String hql =
from TOrder o where o
id = ?
;
TOrder o = (TOrder) s
createQuery(hql)
setParameter(
orderId)
uniqueResult();
// 命名參數
Query q = sess
createQuery(
from DomesticCat cat where cat
name = :name
);
q
setString(
name
Fritz
);
// 位置參數
Query q = sess
createQuery(
from DomesticCat cat where cat
name = ?
);
q
setString(
Izi
);
// 命名參數列表
Query q = sess
createQuery(
from DomesticCat cat where cat
name in (:namesList)
);
q
setParameterList(
namesList
names);
// 分頁查詢
Query q = sess
createQuery(
from DomesticCat cat
);
q
setFirstResult(
);
q
setMaxResults(
);
List cats = q
list();
Criteria List cats = sess
createCriteria(Cat
class)
add( Restrictions
like(
name
Fritz%
) )
add( Restrictions
or(
Restrictions
eq(
age
new Integer(
) )
Restrictions
isNull(
age
)
) )
addOrder( Order
asc(
name
) )
addOrder( Order
desc(
age
) )
list();
Native SQL String treeSql =
+
select
level from tree t
+
start with t
parent_id =
+
connect by prior t
id = t
parent_id
;
List result = session
createSQLQuery(treeSql)
addEntity(
t
Tree
class)
addScalar(
level
Hibernate
INTEGER)
list();
Named SQL queries(不推薦) filter(不推薦) Detached queries(還沒測試) The DetachedCriteria class lets you create a query outside the scope of a session
and then later execute it using some arbitrary Session
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28052.html