Как сделать параметр условного запроса в Jpa - PullRequest
0 голосов
/ 04 апреля 2020

Я работаю над проектом, где мне нужно передать строку, значение которой будет служить дополнительным условием для запроса. Это похоже на проверку правил, если данные переданы на основе условия.

    @Service
    public class ProductTypeParameterService implements CapsCrudService<ProductTypeParameter> {

    public ProductTypeDto getProductByParameters(ApplicationFormDto applicationFormDto ) {

     if(productTypeParameters != null && productTypeParameters.size() > 0 && !productTypeParameters.isEmpty()) {
                for (ProductTypeParameter temp : productTypeParameters) {
                    if(temp.getProductType() != null) {

                        productType = productTypeRepository.findById(temp.getProductType().getId()).get();

                        if(productType != null) {

                            ProductRule productRule = productRuleRepository.findProductRuleByProductTypeId(productType.getId());

                            if(productRule != null && productRule.getRule() != null) {

                                int result = productRuleRepository.validateProductRule(productRule.getRuleValue(), applicationFormDto.getApplicationId());

                                if (result >= 1) {
                                    productTypeDto =  new ProductTypeDto(productType);
                                }
                                else {
                                    productType = productTypeRepository.findById(1L).get();
                                    productTypeDto =  new ProductTypeDto(productType);
                                    System.out.println("DEFAULT PRODUCT TYPE: " + productTypeDto);
                                    System.out.println("FAIL ON OTHER PARAMETERS");
                                }
                            }
                        }
                    }
                }
            } else {
                productType = productTypeRepository.findById(1L).get();
                productTypeDto =  new ProductTypeDto(productType);
                System.out.println("DEFAULT PRODUCT TYPE: " + productTypeDto);
            }
    }
    }

Мои репо

@Repository
public class CustomProductRuleRepositoryImpl implements CustomProductRuleRepository {

@Override
public int validateProductRule (String query, Long applicantId){
    Query q = entityManager.createNativeQuery("select * from INDIVIDUAL_LOAN_APPLICATION WHERE " + query + " AND LOAN_APPLICATION_ID = " + applicantId);

    if (q.getFirstResult() == 1) {
        return q.getFirstResult();
    } else {
        return 0;
    }
}

}

ПРИМЕР: Примером значения productRule.getRuleValue () является "INDIVIDUAL_LOAN_APPLICATION.DEPENDENTS = 2 И INDIVIDUAL_LOAN_APAYSF 1". "

Весь запрос должен выглядеть следующим образом. ВЫБЕРИТЕ COUNT (*) из INDIVIDUAL_LOAN_APPLICATION, ГДЕ INDIVIDUAL_LOAN_APPLICATION.DEPENDENTS = 2, и INDIVIDUAL_LOAN_APPLICATION.YEARS_OF_STAY = 1 И LOAN_APPLICATION_ID = 301

1013 * СО1 * 1013 ВЫБЕРИТЕ COUNT (*) из INDIVIDUAL_LOAN_APPLICATION, ГДЕ INDIVIDUAL_LOAN_APPLICATION.MONTHLYSALARY = 30 000 И LOAN_APPLICATION_ID = 301

Как мне выполнить этот запрос? ТИА !!!

...