在庫がゼロより大きいものをCriteriaBuilder
すべて選択するクエリを作成しようとしています。Product
在庫ありsum(DeliveryRow.amount) - sum(DispatchRow.amount)
ます。どちらも当然の権利のみを含みますProduct
。
Subquery
私は両方DeliveryRow
を作成しようとしましDispatchRow
たが、join()
.
クラス
Product {
(...)
}
DeliveryRow {
@ManyToOne
private Product product;
private int amount;
}
DispatchRow {
@ManyToOne
private Product product;
private int amount;
}
クエリ
このクエリでは、xxx
. サブクエリを作成しようとしましたが、うまくいきませんでした。
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Product> query = cb.createQuery(Product.class);
Root product = query.from(Product.class);
query.select(product);
// sum of DeliveryRow.amount where DeliveryRow.product = Product
// minus
// sum of DispatchRow.amount where DispatchRow.product = Product
Expression stock = xxx;
query.where(cb.gt(stock, Integer.parseInt(0)));
return em.createQuery(query).getResultList();
これを解決する方法について何か提案はありますか?