關於hibernate純sql查詢返回結果集的問題(hbm.xml中不寫多表關聯)


    相信用過hibernate的兄弟們都會因為多表復雜查詢后,為返回的結果如何組裝到一個VO中而煩惱不已。我也不停的為此而煩惱,但是在看了hibernate的transform后,感覺這個方法還挺管用的。
     例如現在有兩張表,一張是user表,放了一些用戶的信息,另外一張表是用戶發表的帖子,里邊有一個user的外鍵。我們需要查詢出來,某個人發布的帖子,sql如下:

Java代碼 
select u.userName,p.title,p.addTime from user as u,post as p where u.id=p.userId


但是我們的POJO映射僅僅是做了user,post表的映射,這個時候,我們需要寫一個PostVO類,里邊放着了用戶的信息和帖子的信息的屬性,設置get\set方法,務必保證這個類里邊有一個默認的構造函數。
然后我們開始寫這個數據庫操作的dao,代碼如下:

Java代碼 
String sql = "select u.userName as userName p.title as title ,p.addTime as addTime from user as u,post as p where u.id=p.userId"
Query q = factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));


紅字部分必須跟PostVO中的屬性一直,這樣就可以返回一個針對PostVO的一個集合。

其實大家可以看下hibernate這一部分的源碼就會發現,主要是使用了AliasToBeanResultTransformer這個類,通過sql的查詢,會返回數組,然后hibernate根據數據表的映射,自動幫我們來set對應的字段屬性,所以標紅的部分務必要跟VO中的屬性值一直,要不然會報錯的。
如果需要的話,大家也可以重寫這個類。例如VOResultTransformer。然后在dao中更改成

Java代碼 
setResultTransformer(new VOResultTransformer(PostVO.class));

即可。

原文鏈接如下:http://glamey.iteye.com/blog/721019


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM