2012-02-03 98 views
0

列表时不工作我有两个表:用户和角色。并且用户使用多对多关系映射到角色。 我想要的是获得包括在角色中的列的选择。所以,我创建了以下命名查询:Namedquery返回元素

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_,!这是造成这个问题的原因,但为什么冬眠包含它,以及如何解决这个问题?

非常感谢

回答

0

无论是查询用户实例,并与他们fecth角色:

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