我有两个表:用户和角色。和用户使用多对多关系映射到角色。 我想要的是获得一系列列,包括角色中的列。所以我创建了以下命名查询:
SELECT u.username, u.password, u.salt, u.enabled, u.roles FROM User u WHERE u.username = :username
但是Hibernate无法编译,SQL日志如下:
Hibernate:
select
user0_.username as col_0_0_,
user0_.password as col_1_0_,
user0_.salt as col_2_0_,
user0_.enabled as col_3_0_,
. as col_4_0_,
role2_.id as id42_,
role2_.friendly_name as friendly2_42_,
role2_.name as name42_
from
users user0_
inner join
users_roles roles1_
on user0_.id=roles1_.users_id
inner join
roles role2_
on roles1_.roles_id=role2_.id
where
user0_.username=?
是什么让我感到兴奋. as col_4_0_,
!它导致了这个问题,但为什么hibernate会包含它,以及如何解决这个问题?
非常感谢
答案 0 :(得分:0)
查询用户实例,并用它们定义角色:
select distinct u from User u
left join fetch u.roles
where u.username = :username
或者使用返回标量的查询,但是你不能仅仅将集合af角色视为标量:
select u.username, u.password, u.salt, u.enabled, r.id, r.name
from User u
left join u.roles r
where u.username = :username
附注:它应该是userName
,而不是username
,以尊重标准的Java命名约定。