【问题标题】:Querydsl order by value of parameter in child object按子对象中参数的值查询dsl顺序
【发布时间】:2020-12-26 22:06:12
【问题描述】:

我有一个样本对象(非常简化)

class Sample {
    List analysis;
}

并且分析包含一个值

class Analysis {
    Integer value;
}

样本包含 N 个这些样本,但并非所有样本都有值。在 Querydsl 中,我想按具有任何价值的分析百分比对结果进行排序。

我试过了,但它看起来不像是在计算值的数量。

query.orderBy(
    new OrderSpecifier(
        pRequest.getOrder(),
        Expressions.asNumber(qSample.analysis.any().value.isNotNull().count().divide(qSample.analysis.size()) )
    )
);

【问题讨论】:

    标签: java spring-boot spring-data-jpa querydsl


    【解决方案1】:

    试试:

    query.orderBy(
        pRequest.getOrder(),
        Expressions.asNumber(
             qSample.analysis.any().value.isNotNull().count().divide(qSample.analysis.size())).asc()
    );
    

    【讨论】:

    • 它给了我Request processing failed; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found 'is' near line 5, column 38
    • Hibernate 似乎不支持在 order by 子句中使用 any() 和 size() 调用引入的子查询。我建议你将它们重写为普通的子查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多