QueryDsl 中 1:n 关系的计算值与 Spring 数据排序

Order By calculated value on 1:n relation in QueryDsl with Spring Data

我正在使用 Spring 数据和 QueryDSL。我有一个 JPQLQuery 并想按计算值对其进行排序。此计算值位于 1:n 关系中。假设我有以下实体:

现在我想按最喜欢的比萨的总价来订购账单。我如何使用 QueryDSL 做到这一点?

在类似 JPQL 的伪代码中,它看起来像这样:

select from Bill b left join b.pizzas p where p.favorite == true order by (p.prize + p.tax)

借助 QueryDSL,我可以在 Order 子句中使用如下内容:

QBill.bill.any().prize.add(QBill.bill.any().tax).asc()

这里的问题是 any()。这样它确实会计算所有奖金和税收,而忽略 where 子句。

我如何用查询 dsl 表示我在伪代码中显示的查询?

提前致谢!

查询将是

QBill bill = QBill.bill;
QPizza pizza = QPizza.pizza;
new JPAQuery(em).from(bill)
                .leftJoin(bill.pizzas, pizza)
                .where(pizza.favorite.eq(true))
                .orderBy(pizza.prize.add(pizza.tax).asc())
                .list(bill);

使用 QBill.bill.any() 你将有一个从 bill 到 pizza 的新连接,这是你想要避免的事情。