.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); .
數據庫
當咱們用HQL進行子查詢的時候,如select * from Tree where pid in (select id from Tree,此時HIBERANTE就會報錯,說什麼*號錯誤之類的。但若是將*改成Tree類裏的全部子段時就不會有問題了。就會像平時同樣第一行數據返回一個Object[],而後你再根據Tree類裏字段對Object[]數組裏的值進行轉換。這樣一來比較麻煩。今天發現若是我SQL來查有一個方法能夠返回一個對象的。
Configuration config = new Configuration().configure();
SessionFactory sf = config.buildSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction();
Query query = session.createSQLQuery("select * from Tree t where pid in (select id from Tree) ").addEntity(Tree.class); //返回對象
List list = query.list(); 數組
此時在遍歷list時就能夠(Tree)list.get[i];將每一行的內容變換爲一個對象了。session
另還能夠返回一個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時就能夠ide
Map map = (Map)list.get[i];函數
map.get("id");map.get("name");來取值。按你的SQL語句select後的字段名來做爲map的Key,但這個key必須與數據庫中的字段名如出一轍。ui
還能夠用做函數方面的。如
Query query = session.createSQLQuery("select sum(id) SUMID from Tree t where pid in (select id from Tree)
.addScalar("SUMID",Hibernate.INTEGER) //轉換類型,按DB中的type轉
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //返回一個map,KEY:爲DB中名稱一致(大小寫一致)spa
直接就map.get("SUMID")能夠取值了orm