session.get(Clazz, id);
session.load(Clazz, id);
區別:若無匹配資料庫記錄,load() 可能拋出無法恢復的異常。若類映射使用代理,load() 返回未初始化的代理,直到調用代理方法才訪問數據庫。若想在某物件中創建關聯卻不想同時加載關聯物件,這很有用。若設置了 batch-size,允許批量加載(因返回代理,無需從數據庫抓取所有物件數據)。若不確定是否有匹配行,應用 get(),它立即訪問數據庫,無對應行則返回 null。
// 返回單行記錄
String hql = "from TOrder o where o.id = ?";
TOrder o = (TOrder) s.createQuery(hql)
.setParameter(0, 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(0, "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(20);
q.setMaxResults(10);
List cats = q.list();
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.or(
Restrictions.eq("age", new Integer(0)),
Restrictions.isNull("age")
) )
.addOrder( Order.asc("name") )
.addOrder( Order.desc("age") )
.list();
String treeSql = ""
+ "select , level from tree t "
+ "start with t.parent_id = 0 "
+ "connect by prior t.id = t.parent_id";
List result = session.createSQLQuery(treeSql)
.addEntity("t", Tree.class)
.addScalar("level", Hibernate.INTEGER)
.list();
DetachedCriteria 類允許在 Session 作用域外創建查詢,稍後使用任意 Session 執行。