hibernate 實現多表連線查詢(轉載)
阿新 • • 發佈:2019-01-31
http://www.cnblogs.com/lihuiyy/archive/2013/03/28/2987531.html
為了方便,直接粘過來,方便檢視。不收藏了
Hibernate主要支援兩種查詢方式:HQL查詢和Criteria查詢。前者應用較為廣發,後者也只是呼叫封裝好的介面。 現在有一個問題,就是實現多表連線查詢,且查詢結果集不與任何一個實體類對應,怎麼解決呢? 舉個例子: 現在有兩個表,一個users使用者表, 一個goods商品表,每個使用者可以有多個商品,而一個商品只能對應一個使用者。 users表中的欄位:userId,userName,telephone,address goods表中的欄位:goodsId,goodsName,userId 現在要實現兩表連線查詢,查出每個使用者所擁有的商品,並把該使用者的資訊和其商品資訊顯示出來。 使用Hibernate反向生成的實體類分別是Users和Goods。 有兩種方式: (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()即可。