使用CriteriaQuery解析异常

时间:2019-02-14 14:47:01

标签: java jpa criteria-api

我的数据库中有一个表,其中包含有关装运的信息,而另一个表包含有关每个装运的状态转换历史的信息。最后一张表中的一条记录如下:

$('div').each(function(){
  $(this).find('i').attr('data-partcount', $(this).find('.part').length);
});

我正在尝试获取按授权日期排序的货运清单。授权日期表示为状态转换表中的第一条记录,初始状态为3,最终状态为4。

这是我为CriteriaQuery实现的代码:

| date       | initial_status | final_status | shipment_id
| 27-07-2009 | 4              | 8            | 245

(稍后实际完成发货的部分,此代码段只是排序部分)

无论何时执行代码,都会得到以下异常,我认为这是解析异常:

private void sortByAuthDate(Root<ShipmentTbl> root, CriteriaQuery<?> query, CriteriaBuilder builder, ListSort sort) {
        Subquery<Timestamp> authDateQuery = query.subquery(Timestamp.class);
        Root<StatusTransitionMessageTbl> stmRoot = authDateQuery.from(StatusTransitionMessageTbl.class);

        Predicate shipmentId = builder.equal(stmRoot.<ShipmentTbl>get("shipment").<String>get("id"), root.<String>get("id"));
        Predicate initialStatus = builder.equal(stmRoot.<Integer>get("initialStatus"), 3);
        Predicate finalStatus = builder.equal(stmRoot.<Integer>get("finalStatus"), 4);

        // returns the authorization date for each queried shipment
        authDateQuery.select(builder.least(stmRoot.<Timestamp>get("date")))
                .where(builder.and(shipmentId, initialStatus, finalStatus))
                .groupBy(stmRoot.<ShipmentTbl>get("shipment").<String>get("id"));

        Expression<Timestamp> authDate = authDateQuery.getSelection();
        Order o = sort.getSortDirection() == ListSort.SortDirection.ASC ? builder.asc(authDate) : builder.desc(authDate);

        query.multiselect(authDate).orderBy(o);
    }

我认为问题出在方法最后一行的orderBy(o)部分,因为如果我删除该部分,该方法将执行而不会出现任何问题(但不会对已排序货件产生预期的最终结果)。我不明白查询是什么问题。

编辑:我注意到,如果我尝试在SQL中重新创建查询,它会抱怨子查询中的GROUP BY子句,之后我将其删除并正常运行。在CriteriaQuery上执行了相同的操作,但仍引发与以前相同的异常。

0 个答案:

没有答案