Hibernate主要支持兩種查詢方式:HQL查詢和Criteria查詢。前者應用較爲廣發,後者也只是調用封裝好的接口。java
如今有一個問題,就是實現多表鏈接查詢,且查詢結果集不與任何一個實體類對應,怎麼解決呢?函數
舉個例子:接口
如今有兩個表,一個users用戶表, 一個goods商品表,每一個用戶能夠有多個商品,而一個商品只能對應一個用戶。get
users表中的字段:userId,userName,telephone,addressit
goods表中的字段:goodsId,goodsName,userIdtest
如今要實現兩錶鏈接查詢,查出每一個用戶所擁有的商品,並把該用戶的信息和其商品信息顯示出來。List
使用Hibernate反向生成的實體類分別是Users和Goods。select
有兩種方式:構造函數
(1)使用傳統方式:方法
String hql="select u.userName, u.telephone, u.address, g.goodsName from Users u, Goods g where u.userId=g.userId";
根據這個查詢語句,調用query.list()方法獲得一個List值,這個List中的每個值都是Object[]類型的,裏面包含了查詢出來的全部值,剩下的自個兒去處理就好了
(2)增長一個映射類
增長一個映射類UsersVoGoods.java,添加須要查詢的信息相關的全部屬性,本例中添加userName, telephone, address, goodsName。併爲這幾個屬性添加setter和getter方法,增長構造函數,參數與這四個屬性對應,那麼能夠用hql查詢方式:
String hql = "select new com.test.UsersVoGoods(u.userName, u.teltphone, u.address, g.goodsName) from Users u, Goods g where u.userId=g.userId";
query.list()的返回值List中的值都是UsersVoGoods型的,直接使用get()就能獲取。
其實不增長映射類也是能夠的,只須要在Users.java實體類裏增長一個構造函數,函數參數仍是須要的全部字段,併爲這些參數中Users實體原來沒有的字段添加屬性和getter() setter()便可。