Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用SELECT MAX()将这个特定的JPQL查询重写为CriteriaQuery?_Java_Translation_Conditional Statements_Jpql_Criteriaquery - Fatal编程技术网

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

Java 如何使用SELECT MAX()将这个特定的JPQL查询重写为CriteriaQuery?,java,translation,conditional-statements,jpql,criteriaquery,Java,Translation,Conditional Statements,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.

我对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)
我试图将其改写为以下标准查询:

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);
我不明白为什么子查询中有双交叉连接。谢谢你的帮助

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))))
)