如何仅限制与 QueryOver 联接的左侧部分的行数?
How to limit rows count only of left part of join with 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
)
可以吗?
HQL 不支持。这里唯一的选择是使用纯 sql 查询。
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
)
可以吗?
HQL 不支持。这里唯一的选择是使用纯 sql 查询。