Java 返回元素列表时Namedquery不工作

Java 返回元素列表时Namedquery不工作,java,hibernate,jpa,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_, us

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

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=?
吸引我的是
。作为第4列第0列,
!它导致了问题,但是为什么hibernate会包括它,以及如何解决这个问题


非常感谢

查询用户实例,并为其提供角色:

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