我正在使用带有QueryDSL的Spring Data。我有一个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?
来表示我在伪代码中显示的查询提前多多感谢!
答案 0 :(得分:0)
查询将是
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()
您将有一个新的从帐单到披萨的加入,这是您想要避免的。