Hibernate Criteria 按多个日期列排序
Hibernate Criteria order by multiple dates columns
我正在尝试创建一个休眠条件查询,该查询将在特定日期列上使用订单 "lastAnswerDate",如果此日期为空,则回退到始终存在的日期:"createDate".
我不知道如何通过条件查询来表达。我想我需要使用表达式和case语句,但我不知道如何开始。
您可以像这样创建自定义订单并使用原生 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 的真实列名。
我正在尝试创建一个休眠条件查询,该查询将在特定日期列上使用订单 "lastAnswerDate",如果此日期为空,则回退到始终存在的日期:"createDate".
我不知道如何通过条件查询来表达。我想我需要使用表达式和case语句,但我不知道如何开始。
您可以像这样创建自定义订单并使用原生 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 的真实列名。