在QueryDsl中使用Spring Data的1:n关系的计算值

时间:2015-03-03 16:13:21

标签: spring-data querydsl

我正在使用带有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?

来表示我在伪代码中显示的查询

提前多多感谢!

1 个答案:

答案 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()您将有一个新的从帐单到披萨的加入,这是您想要避免的。