hql 提示和技巧

你可以计算查询结果数而不用真正返回结果集:

int count = (int) session.CreateQuery("select count(*) from ....").UniqueResult();

通过集合大小排序结果,可以使用以下查询:

select usr.id, usr.Name

from User as usr

    left join usr.Messages as msg

group by usr.id, usr.Name

order by count(msg)

如果你的数据库支持子查询,你可以在你的查询的where从句中放置一个基于选集大小的条件:

from User usr where size(usr.Messages) >= 1

如果你的数据库不支持子查询,使用以下查询:

select usr.id, usr.Name

from User usr

    join usr.Messages msg

group by usr.id, usr.Name

having count(msg) >= 1

由于innerjoin该解决方案不能返回一个没有message的User,所以下述形式的查询更有用:

select usr.id, usr.Name

from User as usr

    left join usr.Messages as msg

group by usr.id, usr.Name

having count(msg) = 0

一个对象的属性可以被绑定到命名查询参数:

IQuery q = s.CreateQuery("from foo in class Foo where foo.Name=:Name and foo.Size=:Size");

q.SetProperties(fooBean); // fooBean has properties Name and Size

IList foos = q.List();

使用带过滤器的IQuery接口可以为集合分页:

IQuery q = s.CreateFilter( collection, "" ); // the trivial filter

q.setMaxResults(PageSize);

q.setFirstResult(PageSize * pageNumber);

IList page = q.List();

使用查询过滤器可以为集合元素排序:

ICollection orderedCollection = s.Filter( collection, "order by this.Amount" );

ICollection counts = s.Filter( collection, "select this.Type, count(this) group by this.Type" );


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值