2014-12-19 222 views
0

我有兩個數據庫表:休眠加入映射

TARGET_TABLE(上USER_ID和TARGET_ID複合鍵)

USER_ID | TICKET_NO | TARGET_USER 
--------------------------------- 
A11 | 12345 | A22 
A11 | 12346 | A33 
A44 | 12347 | A55 

USER_DETAILS_TABLE

CORP_ID | USER_NAME 
------------------ 
A11 | Steve 
A22 | Jon 
A33 | Paul 
A44 | Dave 
A55 | James 

我希望能夠加入時,這些表我只使用select語句。

例如,我想這樣做:

Select USER_ID, USER_NAME, TICKET_NO FROM TARGET_TABLE INNER JOIN USER_DETAILS ON TARGET_TABLE.USER_ID = USER_DETAILS_TABLE.CORP_ID 

我似乎無法找到這樣做的最佳方式。我已經看過Hibernate示例的映射,但這些是如何寫入兩個表的示例我只想從我無法觸摸的表中獲取用戶名!

我目前有兩個單獨的映射爲每個表和運行一個單獨的查詢來獲取用戶名,但這似乎不是最好的方式來做到這一點。

回答

1

此HQL將工作select tt.userId, tt.ticketNo, u.userName from TargetTable tt, User u where tt.userId = u.corpId

但是,這將返回一個List<Object[]>,其中每個列表元素表示一行3列。您可以手動提取這些對象,或者例如使用構造函數public UserVO(String userId, String ticketNo, String userName) { ... }構建一些my.package.UserVO對象。在這種情況下,此

session.createQuery("select new my.package.UserVO(tt.userId, tt.ticketNo, u.userName) from TargetTable tt, User u where tt.userId = u.corpId", UserVO.class).list() 

將返回UserVO的實例。