我有两个数据库表:
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的映射示例,但这些是关于如何写入两个表的示例我只是想从一个我无法触摸的表中获取用户名!
我目前为每个表都有两个单独的映射,并运行单独的查询来获取用户名,但这似乎不是最好的方法。
答案 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
。