2012-02-03 92 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命名約定。