Я использую JPAQuery в QueryDSL.Я хочу знать, как использовать collate в orderBy () - PullRequest
0 голосов
/ 23 сентября 2019

Это код класса My Spring Repository.Он использует JPAQuery из QueryDSL.

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

@Repository
public class StoreQueryDSLRepositoy {

    @Autowired
    JPAQueryFactory jpaQueryFactory;

    public Page<StoreMgmListDTO> getStoreMgmListByStoreName(SearchTargetType searchTargetType, String searchText
            , Pageable pageable, List<IndustryClassType> industryClassTypeFilter) {

        JPAQuery query = this.jpaQueryFactory.query();
        QStore store = QStore.store;

        query.select(store);
        query.from(store);
        query.where(store.removed.isFalse());

....
        if (pageable != null)
            inputSortQuery(query, pageable.getSort(), store);

....

        QueryResults results = query.fetchResults();

        List<Store> storeList = results.getResults();
        List<StoreMgmListDTO> storeMgmListDTOS = new ArrayList<>();
        for(Store store1 : storeList){
            storeMgmListDTOS.add(new StoreMgmListDTO(store1));
        }

        return new PageImpl<>(storeMgmListDTOS, pageable, results.getTotal());
    }

        private void inputSortQuery(JPAQuery query, Sort sort, QStore store) {
        Iterator<Sort.Order> iterator = sort.iterator();
        while (iterator.hasNext()) {
            Sort.Order order = iterator.next();
            switch (order.getProperty()) {
                case "industryClassType":
                    query.orderBy(order.isAscending() ? store.industryClass.asc() : store.industryClass.desc());
                    break;
                case "storeName":
                    query.orderBy(order.isAscending() ? store.name.asc() : store.name.desc());
                    break;
                case "startLicenseDate":
                    query.orderBy(order.isAscending() ? store.curLicense.startDate.asc() : store.curLicense.startDate.desc());
                    break;
                case "endLicenseDate":
                    query.orderBy(order.isAscending() ? store.curLicense.endDate.asc() : store.curLicense.endDate.desc());
                    break;
                case "licenseType":
                    query.orderBy(order.isAscending() ? store.curLicense.licenseType.asc() : store.curLicense.licenseType.desc());
                    break;
//                case "numOfSignage":
//                    query.orderBy(order.isAscending() ? store.signageSet.size().asc() : store.signageSet.size().desc());
//                    break;
            }
        }
    }
}

Я хочу вставить разбор в inputSortQuery () ниже.как это

select store.name
from store
left outer join license l on store.cur_license_id = l.id
left outer join signage s on store.id = s.store_fkey
order by store.name collate "C" asc
...