返回元素列表时,Namedquery无法正常工作

时间:2012-02-03 08:15:27

标签: java hibernate jpa

我有两个表:用户和角色。和用户使用多对多关系映射到角色。 我想要的是获得一系列列,包括角色中的列。所以我创建了以下命名查询:

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会包含它,以及如何解决这个问题?

非常感谢

1 个答案:

答案 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命名约定。