使用Hibernate Criteria从日期中选择不同的年份

时间:2014-03-06 20:02:52

标签: java mysql hibernate

我希望通过Hibernate Criteria API从MySQL日期字段中获取所有不同的年份。这是我要转换为条件的查询:

sess.createQuery("SELECT DISTINCT year(o.date) FROM Observation");

我试过了:

Criteria crit = sess.createCriteria(Observation.class)
    .setProjection(Projections.distinct(Projections.property("year(date)")));

但它返回错误

  

错误 - 无法解析属性:年(日期):ca.ogsl.biodiversity.hibernate.Observation

是否有人知道这是否可能以及如何?

非常感谢!!!

凯文

2 个答案:

答案 0 :(得分:2)

尝试使用sql投影,因此您可以使用任何SQL表达式:

criteria.setProjection(Projections.sqlProjection( "yeard(DATE_COLUMN_NAME) as year", new String[] {"year"}, new Type[] {StandardBasicTypes.INTEGER} ));  

答案 1 :(得分:0)

使用DISTINCT关键字查询不同的年份,而不是花费所有年份并尝试在Java代码中过滤它们。

SELECT DISTINCT year(o.date) FROM Observation;