Hibernate Join Mapping

时间:2014-12-19 11:39:18

标签: java hibernate mapping hql inner-join

我有两个数据库表:

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 个答案:

答案 0 :(得分:1)

这个HQL可以正常工作select tt.userId, tt.ticketNo, u.userName from TargetTable tt, User u where tt.userId = u.corpId

但是,这将返回List<Object[]>,其中每个列表元素代表一行,包含3列。您可以手动提取这些内容,或者例如使用构造函数my.package.UserVO创建一些public UserVO(String userId, String ticketNo, String userName) { ... }对象。在那种情况下,这个

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

的实例