Hibernate Criteria按多个日期列

时间:2016-03-14 11:13:26

标签: hibernate criteria hibernate-criteria

我正在尝试创建一个hibernate条件查询,该查询将使用特定日期列上的订单" lastAnswerDate"如果此日期为空,则回退始终存在的日期:" createDate"。

我不知道如何通过条件查询来表达它。我想我需要使用表达式和case语句,但我不知道如何开始。

1 个答案:

答案 0 :(得分:2)

您可以像这样创建自定义订单并使用本机sql:

public class CustomizedOrderBy extends Order {
    private String sqlExpression;

    protected CustomizedOrderBy(String sqlExpression) {
        super(sqlExpression, true);
        this.sqlExpression = sqlExpression;
    }

    public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
        return sqlExpression;
    }

    public static Order sqlFormula(String sqlFormula) {
        return new CustomizedOrderBy(sqlFormula);
    }

    public String toString() {
        return sqlExpression;
    }

}

然后像这样使用它:

Criteria criteria = session.createCriteria(MyEntity.class);     
criteria.addOrder(CustomizedOrderBy.sqlFormula("case when lastAnswerDate is null then createDate else lastAnswerDate end  desc  "));                    
List res = criteria.list();

它是原始sql所以请务必使用lastAnswerDate和createDate的真实colmumn名称。