Service 自定义OrderByComparator日期时间天数

Service 自定义OrderByComparator日期时间天数,service,liferay,dynamicquery,Service,Liferay,Dynamicquery,我需要按DateTimeColumn上的天数对DynamicQuery进行排序(顺便说一下,请联系表) 默认orderByComparator将带来: 1969/04/02 1970/04/01 1970/04/01 1970/04/11 但我需要 1970/04/01 1970/04/01 1969/04/02 1970/04/11 我尝试重写OrderByComparator,然后在dynamicQuery()方法上使用它,但没有成功 我自己尝试实现OrderByComparatorFa

我需要按DateTimeColumn上的天数对DynamicQuery进行排序(顺便说一下,请联系表)

默认orderByComparator将带来:

1969/04/02
1970/04/01
1970/04/01
1970/04/11
但我需要

1970/04/01
1970/04/01
1969/04/02
1970/04/11
我尝试重写OrderByComparator,然后在dynamicQuery()方法上使用它,但没有成功

我自己尝试实现OrderByComparatorFactory,但没有调用我的比较方法

我想我可以使用自定义查询,但没有其他方法可以这样做


顺便说一下,我使用的是一个搜索容器,DynamicQuery不使用OrderByComparator方法中的compare方法。DynamicQuery仅添加OrderByComparator中的字段和asc/desc

请参见此处的Liferay代码: BasePersistentImpl:

public List findWithDynamicQuery(
        DynamicQuery dynamicQuery, int start, int end,
        OrderByComparator orderByComparator)
    throws SystemException {

    OrderFactoryUtil.addOrderByComparator(dynamicQuery, orderByComparator);

    return findWithDynamicQuery(dynamicQuery, start, end);
}
OrderFactoryUtil:

public static void addOrderByComparator(
    DynamicQuery dynamicQuery, OrderByComparator obc) {

    if (obc == null) {
        return;
    }

    String[] orderByFields = obc.getOrderByFields();

    for (String orderByField : orderByFields) {
        if (obc.isAscending(orderByField)) {
            dynamicQuery.addOrder(asc(orderByField));
        }
        else {
            dynamicQuery.addOrder(desc(orderByField));
        }
    }
}
您可以按照比较器对结果列表进行排序,就像我在本例中所做的那样: