如何使用SELECT MAX()将特定的JPQL查询重写为CriteriaQuery?

| 我对JPA还是很陌生,在理解一个特定查询时遇到了问题。我已重写为CriteriaQuery,但结果和转换为SQL的查询不正确。 背景情况:我有一张商店交易(移动)表,商店中的当前金额定义为所有变更的总和。现在,我想选择并显示最后的动作,因为它们还包含有关所存储的结果量的信息。 因此,这是JPQL中的查询:
SELECT m FROM move m WHERE m.id = (
  SELECT MAX(o.id) FROM move o WHERE (o.item = m.item AND m.cell.store = :s)
我试图将其重写为以下CriteriaQuery:
CriteriaBuilder builder = model.getCriteriaBuilder();
CriteriaQuery<Move> query = builder.createQuery(Move.class);
Root<Move> root = query.from(Move.class);

Subquery<Long> subquery = query.subquery(Long.class);
Root<Move> subroot = subquery.from(Move.class);
subquery.select(builder.max(subroot.get(\"id\").as(Long.class)));

subquery.where(builder.and(
    builder.equal(
        subroot.get(\"item\").get(\"id\"),
        root.get(\"item\").get(\"id\")),
    builder.equal(
        subroot.get(\"cell\").get(\"store\").as(Store.class),
        store)));

Expression<Boolean> where = builder.equal(
    root.get(\"id\"),
    subquery);

query.where(where);

return model.getList(query);
产生的错误SQL查询如下:
SELECT t0.id, (...) FROM move t0 WHERE (t0.id = (
  SELECT MAX(t1.id) FROM item t3, item t2, move t1 
  WHERE (((t2.id = t3.id) AND 
        (t1.cell_store = ?)) AND 
        ((t2.id = t1.item_ref) AND 
        (t3.id = t0.item_ref))))
)
我不明白为什么子查询中会有双重交叉联接。感谢您的帮助!     
已邀请:

要回复问题请先登录注册