ПОРЯДОК ПО СЛУЧАЮ в сортировке по страницам Java SpringJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 ПОРЯДОК ПО СЛУЧАЮ в сортировке по страницам Java Spring

Сообщение Anonymous »

Точно так же, как и этот вопрос: аналогичное решение. Я хотел бы знать, можно ли передать ORDER BY CASE WHEN exID = 2 THEN 0 ELSE 1 END из angular в java Spring или переменную для заказа по exID.
Изначально в моем случае у меня есть params = params.append('sort', matSort.active + ',' + matSort.direction) где matSort.active = exID,field1,field2,field3 и matSort.direction = asc. Как мне заставить серверную часть сортировать по переменной, которой нет в возвращаемом объекте DTO, и когда метод репозитория использует собственный запрос?
Я пробовал использовать JpaSort.unsafe, но получил синтаксическую ошибку, поскольку каким-то образом запрос использует справочную таблицу
Результат SQL из консоли

Код: Выделить всё

TableEx1 te
ORDER BY
te.CASE WHEN exID.id = 2 THEN 0 ELSE 1
END,
field1 asc,
field2 asc,
field3 asc
И так до сих пор:
угловая сервисная функция

Код: Выделить всё

listSomething(page: MatPaginator, matSort: MatSort) {
let params: HttParams = FormsUtil.generateParamsForPaginationWithSorting(page, matSort);
return this.http.get
>(${this.endpoint}/list-something, {params});
}
util.ts

Код: Выделить всё

static generateParamsForPaginationWithSorting(page: MatPaginator, matSort: MatSort): HttpParams {
let params: HttpParams = this.generateParamsForPage(page);

if (matSort != null && matSort.active != null) {
const attribute = ['exID.id', 'exID.IDType', 'EXID.IDType'].find(field => matSort.active.includes(field));

if (attribute) {
params = params.append('orderByExID', attribute);
}

params = params.append('sort', matSort.active + ',' + matSort.direction);
}
return params;
}
функция Java

Код: Выделить всё

// CONTROLLER:
@GetMapping(“/list-something”) public Page listOrder(Pageable page, String orderByExID) {
return service.searchListOfSomething(page, orderByExID);
}

// SERVICE:
public Page searchListOfSomething(Pageable page, String orderByExID) {
page = createSortForExIDOrder(orderByExID, page);
return repository.searchListOfSomething(page);
}

private Pageable createSortForExIDOrder(String orderByExID, Pageable page) {
if (orderByExID != null) {
Sort sort = JpaSort.unsafe(Sort.Direction.ASC, "CASE WHEN " + orderByExID + " = 1 THEN 0 ELSE 1 END");
sort = sort.and(page.getSort());
return PageRequest.of(page.getPageNumber(), page.getPageSize(), sort);
}
return page;
}
Примечание. Я знаю, что вы можете поместить это непосредственно в NativeQuery, но я хочу знать другие способы заставить его работать

Подробнее здесь: https://stackoverflow.com/questions/790 ... ava-spring
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»