那是我的代码:

final JPAQuery query = new JPAQuery(entityManager);
final List<Tuple> myList = query
                .from(QPerson.person)
                    .groupBy(QPerson.person.name)
                    .where(myBooleanExpression) //myBooleanExpression declared at the top of code
                    .list(QPerson.person.name,
                          QPerson.person.cash.sum());


我想做的是列出:


名称(无条件)
总和(现金)仅当(条件),其他(..)时


有什么建议吗?

最佳答案

您可以根据情况使用SQL CASE,例如:

final JPAQuery query = new JPAQuery(entityManager);
final List<Tuple> myList = query
    .from(QPerson.person)
    .groupBy(QPerson.person.name)
    .where(myBooleanExpression)
    .list(QPerson.person.name,
          new CaseBuilder()
              .when(yourOtherBooleanExpression).then(QPerson.person.cash.sum())
              .otherwise(yourOtherNumericExpressionOrLiteral));



yourOtherBooleanExpression应该是Predicate(例如BooleanExpression
yourOtherNumericExpressionOrLiteral应该是NumberExpression<T>T本身,其中TQPerson.person.cash的基本类型。

10-06 06:05