根據給定的例子,它不需要按最大值2進行排序,而是按日期排序,修改日期時可用,否則爲createdDate。這可以做到如下。
正確的工具是COALESCE表達式。它返回第一個非空值。當所有參數都爲空時,則返回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();
JPQL是位更易讀:
SELECT y, (y.modifiedDate, y.createdDate)
FROM YourEntity y
ORDER BY coalesce(y.modifiedDate, y.createdDate)