熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

技術分享 小結Hibernate的查詢方式

2013-11-23 20:10:10  來源: Java開源技術 

   get() and load()
  
  sessionget(Clazz id);
  sessionload(Clazz id);
  
  說明: load()與get()的區別
  
  請注意如果沒有匹配的數據庫記錄load()方法可能拋出無法恢復的異常(unrecoverable exception) 如果類的映射使用了代理(proxy)load()方法會返回一個未初始化的代理直到你調用該代理的某方法時才會去訪問數據庫 若你希望在某對象中創建一個指向另一個對象的關聯又不想在從數據庫中裝載該對象時同時裝載相關聯的那個對象那麼這種操作方式就用得上的了 如果為相應類映射關系設置了batchsize 那麼使用這種操作方式允許多個對象被一批裝載(因為返回的是代理無需從數據庫中抓取所有對象的數據)
  
  如果你不確定是否有匹配的行存在應該使用get()方法它會立刻訪問數據庫如果沒有對應的行會返回null
  
   HQL
  
  // 返回一行記錄
  String hql = from TOrder o where oid = ?;
  TOrder o = (TOrder) screateQuery(hql)
  setParameter( orderId)
  uniqueResult();
  
  // 命名參數
  Query q = sesscreateQuery(from DomesticCat cat where catname = :name);
  qsetString(name Fritz);
  
  // 位置參數
  Query q = sesscreateQuery(from DomesticCat cat where catname = ?);
  qsetString( Izi);
  
  // 命名參數列表
  Query q = sesscreateQuery(from DomesticCat cat where catname in (:namesList));
  qsetParameterList(namesList names);
  
  // 分頁查詢
  Query q = sesscreateQuery(from DomesticCat cat);
  qsetFirstResult();
  qsetMaxResults();
  List cats = qlist();
  
   Criteria
  
  List cats = sesscreateCriteria(Catclass)
  add( Restrictionslike(name Fritz%) )
  add( Restrictionsor(
  Restrictionseq( age new Integer() )
  RestrictionsisNull(age)
  ) )
  addOrder( Orderasc(name) )
  addOrder( Orderdesc(age) )
  list();
  
   Native SQL
  
  String treeSql = +
  select level from tree t +
   start with tparent_id = +
   connect by prior tid = tparent_id;
  
  List result = sessioncreateSQLQuery(treeSql)
  addEntity(t Treeclass)
  addScalar(level HibernateINTEGER)
  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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.