Создать запрос в Spring Data JPA с динамическим столбцом и предложением где это возможно в QueryDSL? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть запрос как:

@Query(value = "select * from participant p where case when ?1 is not null then p.BUSINESS_TYPE_ID = ?1 else p.BUSINESS_TYPE_ID is not null end " 
                    +"and case when ?2 is not null then p.CITY_ID = ?2 else p.CITY_ID is not null end "
                    +"and case when ?3 is not null then p.COUNTRY_ID = ?3 else p.COUNTRY_ID is not null end " 
                    +"and case when ?4 is not null then p.REGION_ID = ?4 else p.REGION_ID is not null end "
                    +"and case when ?5 is not null then p.PAYMENT_METHOD_TYPE_ID = ?5 else p.PAYMENT_METHOD_TYPE_ID is not null end "
                    +"and case when ?6 is not null then p.CURRENCY_ID = ?6 else p.CURRENCY_ID is not null end;", nativeQuery = true)

Он отлично работает на MySQL, но мне нужно создать его динамически, который работает как на MySQL, так и на Oracle. Это возможно в QueryDSL или Spring Data JPA? Спасибо!

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете использовать QueryDSL (далее - просто суть)

JPAQuery<?> query = new JPAQueryFactory(mEntityManager).query();

QParticipant participant = QParticipant.participant;

BooleanBuilder builder = new BooleanBuilder();

builder = (null != parameter1? builder.and(participant.businessTypeId.isNotNull().and(participant.businessTypeId.eq(parameter1))): builder.and(participant.businessTypeId.isNotNull()));

builder = (null != parameter2? builder.and(participant.cityId.isNotNull().and(participant.cityId.eq(parameter2))): builder.and(participant.cityId.isNotNull()));

//... (similar for countryId, regionId, paymentMethodTypeId, currencyId)

return query.select(participant).from(participant).where(builder).fetchAll();
...