2016-12-19 9 views
0

Я пытаюсь создать этот CriteriaQuery с помощью SelectCase, но получаю сообщение об ошибке. Это мои переменные Критерии:Как получить атрибут модели с помощью 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; 

В моей модели все соединено с транзакцией через идентификаторы (страна, поставщик, клиент, семья).

После присоединения все с критериями, что я хочу это (я знаю, что это выступление удар в лицо, я починю его позже я только учусь Criteria.):

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") 

Потому что может» t be cast to 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); 
    } 

ответ

0

transaction.get ("ЧФР"), как (Number.class)

.

 Смежные вопросы

  • Нет связанных вопросов^_^