Как ограничить количество строк только левой части соединения с QueryOver?
Take()
ограничивает общее количество строк всего результата запроса, но мне нужно ограничить только строки левой стороны объединения, чтобы получить 50 пользователей и все их символы:
session.QueryOver<User>(() => userAlias)
.Where(...)
//.Take(50) - can't do this!
.JoinAlias(x => x.Characters, () => characterAlias, JoinType.LeftOuterJoin)
.Select(...)
.TransformUsing(Transformers.AliasToBean<UserDto>())
.Take(50)
.List<UserDto>();
Этот запрос должен быть выполнен через QueryOver.
Пример sql:
SELECT u.id, u.nickname, c.class_id, c.xp FROM (
(SELECT id, nickname FROM users WHERE lower(nickname) LIKE 'abcd%' LIMIT 50) as u
LEFT OUTER JOIN characters c ON c.user_id = u.id
)
Является ли это возможным?
1 ответ
Решение
HQL не поддерживает это. Единственный вариант здесь - использовать чистый SQL-запрос.