CriteriaBuilder
을 사용하여 쿼리를 생성하여 0보다 큰 주식이 모두 Product
인 것을 선택하려고합니다. 주식은 sum(DeliveryRow.amount) - sum(DispatchRow.amount)
입니다. 두 코스 모두 오른쪽에만 들어 있습니다 Product
.결과 Integer가있는 CriteriaBuilder 조인/하위 쿼리
나는 join()
을 사용해야한다고 생각하지만 DeliveryRow
과 DispatchRow
모두에 대해 Subquery
을 만들려고했습니다. 이 쿼리에서
클래스
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();
해결 방법에 대한 제안 사항이 있으십니까?
타입 페치 때문에 CriteriaBuilder를 사용했지만 이전에 NamedQueries와 함께 작업 해 보았습니다. 걱정하지 않습니까? – Aquillo
유형 안전성에 대한 관심사는 Object []입니까? –
질의는 '문자열'이 아닙니다. 'DispatchRow'에 대한 변경 사항으로 인해 문제가 발생할 수 있습니까? – Aquillo