小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Hibernate的createSQLQuery查詢的小例子

當我們用HQL進行子查詢的時候,如select * from Tree where pid in (select id from Tree,此時HIBERANTE就會報錯,說什么*號錯誤之類的。但如果將*改為Tree類里的所有子段時就不會有問題了。就會像平時一樣第一行數(shù)據(jù)返回一個Object[],然后你再根據(jù)Tree類里字段對Object[]數(shù)組里的值進行轉換。這樣一來比較麻煩。今天發(fā)現(xiàn)如果我SQL來查有一個方法可以返回一個對象的。
Java代碼  收藏代碼
  1. Configuration config = new Configuration().configure();  
  2. SessionFactory sf     = config.buildSessionFactory();  
  3. Session session = sf.openSession();  
  4. Transaction ts = session.beginTransaction();  
  5. Query query = session.createSQLQuery("select * from Tree t where pid in (select id from Tree) ").addEntity(Tree.class); //返回對象  
  6. List  list = query.list();   


此時在遍歷list時就可以(Tree)list.get[i];將每一行的內(nèi)容變換為一個對象了。

另還可以返回一個Map對象,也就是說在在list里包含多個Map,代碼如下
引用
Query query = session.createSQLQuery("select id,name from Tree t where pid in (select id from Tree) ").setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
//返回一個map,KEY:為DB中名稱一致(大小寫一致)遍歷list時就可以

Map map = (Map)list.get[i];

map.get("id");map.get("name");
來取值。按你的SQL語句select后的字段名來作為map的Key,但這個key必須與數(shù)據(jù)庫中的字段名一模一樣。


還可以用作函數(shù)方面的。如
Java代碼  收藏代碼
  1. Query query = session.createSQLQuery("select sum(id) SUMID from Tree t where pid in (select id from Tree)  
  2. .addScalar("SUMID",Hibernate.INTEGER)  //轉換類型,按DB中的type轉  
  3. .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //返回一個map,KEY:為DB中  

名稱一致(大小寫一致)

直接就map.get("SUMID")可以取值了


還有一點就是這個方法在Hibernate3.2版本上才能正常運行。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多