Java 使用hibernate标准按最多2个日期排序

Java 使用hibernate标准按最多2个日期排序,java,sql,hibernate,criteria-api,hibernate-criteria,Java,Sql,Hibernate,Criteria Api,Hibernate Criteria,我的数据库中有一个表,其中既有创建的日期,也有修改的日期。我希望能做一些类似的事情 select <all the columns> , CASE WHEN MODIFIED_DATE IS NULL THEN CREATED_DATE ELSE MODIFIED_DATE END as editDate FROM TABLE ORDER BY editDate; 挑选 ,修改日期为空时的大小写 然后创建\u DATE,否则修改\u DATE END为editDate

我的数据库中有一个表,其中既有创建的日期,也有修改的日期。我希望能做一些类似的事情


select <all the columns>
, CASE WHEN MODIFIED_DATE IS NULL 
   THEN CREATED_DATE ELSE MODIFIED_DATE END as editDate 
FROM TABLE ORDER BY editDate;

挑选
,修改日期为空时的大小写
然后创建\u DATE,否则修改\u DATE END为editDate
从表中按编辑日期排序;
使用标准API


我该怎么做

根据给定示例,不需要按最大值2排序,而是按日期排序,该日期在可用时为修改日期,否则为创建日期。这可以按如下方式进行

正确的工具是合并表达式。它返回第一个非空值。当所有参数都为null时,则返回null

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Object[]> cq = cb.createQuery(Object[].class);
Root<YourEntity> root = cq.from(YourEntity.class);
cq.multiselect(root, cb.coalesce(
   root.get("modifiedDate"), 
   root.get("createdDate")));
cq.orderBy(cb.asc(cb.coalesce(
   root.get("modifiedDate"), 
   root.get("createdDate"))));

List<Object[]> result = em.createQuery(cq).getResultList();
SELECT y, (y.modifiedDate, y.createdDate) 
FROM YourEntity y 
ORDER BY coalesce(y.modifiedDate, y.createdDate)