我想在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