Namedquery не работает при возврате списка элементов - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть две таблицы: пользователь и роли. Пользователь сопоставляется с ролями, используя отношения «многие ко многим». то, что я хочу, это получить выбор столбцов, в том числе в роли. Поэтому я создал следующий именованный запрос:

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 голосов
/ 03 февраля 2012

Либо запрашивайте пользовательские экземпляры и указывайте роли с ними:

select distinct u from User u
left join fetch u.roles
where u.username = :username

Или используйте запрос, который возвращает скаляры, но тогда вы не можете просто обработать коллекцию и роли, как если бы она былаscalar:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...