Есть ли способ определить пользовательский порядок по стратегии при использовании аннотации javax.persistence.OrderBy? - PullRequest
0 голосов
/ 19 октября 2011

Из документов, которые я знаю, мы можем указать столбец, но есть ли способ передать пользовательский компаратор и отсортировать по нему?

Так что это может выглядеть примерно так:

@OneToMany(cascade=CascadeType.ALL)
@OrderBy("createdDateTime", comparator=StripYearComparator.class)
public List<A> getAs() {
    return result;
}

У кого-нибудь был такой же вариант использования, как у меня?

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

@ Грей, спасибо за совет, я решил проблему с другим подходом и подумал, что могу поделиться им.

Мы используем JSF с Richfaces 3.1.6GA.Первоначально я хотел, чтобы слой JPA возвратил список уже заказанных для подачи в Richfaces.Мы обнаружили, что в Richfaces 3.2 и выше функциональность sortBy встроена в тег.Все, что вам нужно указать, это метод, по которому вы хотите сортировать.Поэтому мое решение состояло в том, чтобы перейти на более новую версию Richfaces и добавить следующий метод в мой класс сущностей.

Так что в моем классе Person

у меня есть метод getNamesWithoutCommas (), который какname подразумевает, получает имя без запятых, а затем использует его для сортировки.

При объявлении моего столбца у меня есть что-то вроде этого:

<rich: column sortBy="person.namesWithoutCommas"/>
0 голосов
/ 19 октября 2011

Не то чтобы я знал о @Tommy.Весь смысл @OrderBy состоит в том, чтобы определить, как сортировка выполняется базой данных (или другим хранилищем данных).Он преобразуется в запрос SQL (или какой-либо другой запрос), например, следующий:

SELECT * FROM `foo` WHERE `id` = ? ORDER BY `val`

Данные не извлекаются и затем сортируются на клиенте драйвером или каким-либо другим объектомтак что нет никакого способа ввести свой собственный компаратор.

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

...