我想在HQL执行以下查询:使用功能处于休眠聚集函数的参数
select count(distinct year(foo.date)) from Foo foo
然而,这会导致以下异常:
org.hibernate.hql。 ast.QuerySyntaxException: 期待CLOSE,发现 '(' 近线 1,列27
看来THA休眠不允许使用函数作为其聚合函数的参数。有什么方法可以获得所需的结果吗?
我想在HQL执行以下查询:使用功能处于休眠聚集函数的参数
select count(distinct year(foo.date)) from Foo foo
然而,这会导致以下异常:
org.hibernate.hql。 ast.QuerySyntaxException: 期待CLOSE,发现 '(' 近线 1,列27
看来THA休眠不允许使用函数作为其聚合函数的参数。有什么方法可以获得所需的结果吗?
随着标准的API可以使用sqlProjection:
String func = format("count(distinct year(%s_.date))", criteria.getAlias());
String alias = "dateCol";
session.createCriteria(Foo.class).setProjection(
sqlProjection(
format("%s as %s", func, alias),
new String[] { alias },
new Type[] { Hibernate.LONG }
)
)
);
这应该工作。我没有测试过它。
sql投影的唯一问题是您必须知道(即重复)列名称。
感谢您指出使用hibernate投影的可能性。必须深入研究它们! – samik 2010-01-19 12:12:41
我仍然有兴趣知道这是否只能在纯HQL中实现。 – samik 2010-01-19 12:14:13