QueryDsl 中 1:n 关系的计算值与 Spring 数据排序
Order By calculated value on 1:n relation in QueryDsl with Spring Data
我正在使用 Spring 数据和 QueryDSL。我有一个 JPQLQuery 并想按计算值对其进行排序。此计算值位于 1:n 关系中。假设我有以下实体:
- Bill - 附有一份披萨清单
- 披萨 - 有属性奖和属性税。此外还有一个布尔标志 "favorite",只能有一个披萨。
现在我想按最喜欢的比萨的总价来订购账单。我如何使用 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 的新连接,这是你想要避免的事情。
我正在使用 Spring 数据和 QueryDSL。我有一个 JPQLQuery 并想按计算值对其进行排序。此计算值位于 1:n 关系中。假设我有以下实体:
- Bill - 附有一份披萨清单
- 披萨 - 有属性奖和属性税。此外还有一个布尔标志 "favorite",只能有一个披萨。
现在我想按最喜欢的比萨的总价来订购账单。我如何使用 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 的新连接,这是你想要避免的事情。