日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Hibernate的createSQLQuery查詢的小例子

當(dāng)我們用HQL進(jìn)行子查詢的時候,如select * from Tree where pid in (select id from Tree,此時HIBERANTE就會報錯,說什么*號錯誤之類的。但如果將*改為Tree類里的所有子段時就不會有問題了。就會像平時一樣第一行數(shù)據(jù)返回一個Object[],然后你再根據(jù)Tree類里字段對Object[]數(shù)組里的值進(jìn)行轉(zhuǎn)換。這樣一來比較麻煩。今天發(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)  //轉(zhuǎn)換類型,按DB中的type轉(zhuǎn)  
  3. .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //返回一個map,KEY:為DB中  

名稱一致(大小寫一致)

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


還有一點(diǎn)就是這個方法在Hibernate3.2版本上才能正常運(yùn)行。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多