【发布时间】:2013-05-11 15:08:54
【问题描述】:
我正在尝试使用CriteriaBuilder 创建一个查询以选择所有库存大于零的Product。股票是sum(DeliveryRow.amount) - sum(DispatchRow.amount)。两者当然只包含正确的Product。
我尝试为DeliveryRow 和DispatchRow 创建Subquery,尽管我觉得应该使用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();
关于如何解决这个问题的任何建议?
【问题讨论】:
标签: java jpa criteria-api