0
SelectCaseでこのCriteriaQueryを作成しようとしていますが、エラーが発生しています。これらは私の基準の変数です:モデルの属性をCriteriaのCASE WHEN JPAで集計する方法
CriteriaBuilder cb;
CriteriaQuery cq;
Root<Stransaction> transaction;
Join<Stransaction, Customer> customerJoin;
Join<Customer, Country> countryJoin;
Join<Stransaction, Supplier> supplierJoin;
Join<Stransaction, Productfamily> familyJoin;
私のモデルでは、すべてがトランザクションID(国、サプライヤー、顧客、家族)に参加しています。
基準ですべてに参加した後、私が欲しいのはこれです(私は、これは顔にパフォーマンスのパンチで知って、私は後でそれを修正します、私はちょうど基準を学んでいる。):
SUM(CASE WHEN COUNTRY.COUNTRYNAME = :COUNTRYNAME THEN Transaction.CFR ELSE 0)
しかし、この行は私にエラーを与えている:
selections.add(cb.sum(cb.<Number>selectCase().when(cb.equal(countryJoin.get("countryname"), country.getCountryname()), (Numeric)transaction.get("cfr")).otherwise(0)));
Especificallyここ:
(Numeric)transaction.get("cfr")
」それは可能性があるためNumericにキャストされる。 Transaction.cfrをselectCase()に送信するにはどうすればよいですか?
これは全体の方法である:。
private void generateSelect(FilterRegion filter) throws Exception
{
List<Country> countries = delegate.country().findAll();
List<Selection<?>> selections = new LinkedList<>();
if(filter.getContext() == FAMILY_CTX)
{
selections.add(familyJoin.get("prodfamname"));
cq.groupBy(familyJoin.get("prodfamname"));
}
else if(filter.getContext() == CUSTOMER_CTX){
selections.add(customerJoin.get("customername"));
cq.groupBy(customerJoin.get("customername"));
}
else if(filter.getContext() == SUPPLIER_CTX){
selections.add(supplierJoin.get("suppliername"));
cq.groupBy(supplierJoin.get("suppliername"));
}
for(Country country : countries)
selections.add(cb.sum(cb.<Number>selectCase().when(cb.equal(countryJoin.get("countryname"), country.getCountryname()), (Numeric)transaction.get("cfr")).otherwise(0)));
cq.multiselect(selections);
}