【发布时间】:2010-05-24 19:24:37
【问题描述】:
我对 hql 还是有点陌生,我对正在编写的查询的聚合函数和效率有疑问。
假设我在 hibernate 中映射了这个类(为简洁起见,省略了 getters/setters/constructors/etc):
public class Foo
{
private int i;
private String s;
private float f;
}
我想做一个 hql 查询以获取具有最高 i 值和指定 s & f 值的 Foo 实例。我目前的解决方案是这样的:
List<Foo> fooList = (List<Foo>)session.createQuery(
"from Foo as foo where foo.s = :str and foo.f = :val order by foo.i desc").
setParameter("str", <stringgoeshere>).setParameter("val", <floatgoeshere>).
list();
return fooList.get(0);
如果我理解正确,此方法将具有N+1 selects problem(尽管只要我仅从列表中获取第一个结果,N 就有望为 1,但仍然如此)。我假设有一些方法可以使用 uniqueResult() 执行此操作,但我不太了解聚合函数在这种情况下如何工作。我能找到的关于“max()”的唯一示例要么在 where 子句中,要么在返回值中。
我应该如何编写此查询以在单次选择中完成并获取 i 最高的 Foo 实例?
感谢您的帮助!
【问题讨论】: