JPQL: можно ли отсортировать запрос по "лучшим совпадениям"? - PullRequest
0 голосов
/ 25 ноября 2011

У меня следующий вопрос / проблема:

Я использую JPQL (JPA 2.0 и eclipselink), и я хочу создать запрос, который дает мне результаты, отсортированные следующим образом: Сначала результаты сортируются по возрастаниюпо лучшим матчам.После этого должны появиться худшие матчи.Мои объекты основаны на простом классе с именем «Person» с атрибутами:

{String Id,
String forename,
String name}

Например, если я ищу «Picol», результат должен выглядеть следующим образом:

[{129, Picol, Newman}, {23, Johnny, Picol},{454, Picolori, Newta}, {4774, Picolatus, Larimus}...]

PS: я уже думал об использовании двух запросов, первый - поиск с помощью «равно», а второй - «как», хотя я не совсем уверен, как соединить оба результата запроса ...?

НадеюсьЗа вашу помощь и заранее спасибо, Флориан

1 Ответ

0 голосов
/ 26 ноября 2011

Если, как кажется из вашего вопроса, у вас есть только две группы (первая группа: имя или имя равно искомой строке; вторая группа: имя или имя содержит искомую строку), и если все люди в данной группе имеютта же «оценка совпадения», тогда использование двух запросов - действительно хорошее решение.

Первый запрос:

select p from Person p where p.foreName = :param or p.name = :param

Второй запрос:

select p from Person p where (p.foreName like :paramSurroundedWithPercent 
                              or p.name like :paramSurroundedWithPercent)
                             and p.foreName != :param 
                             and p.name != :param

Выполнить оба запроса (каждый возвращает List<Person>) и добавляет все элементы второго списка в первый (используя метод addAll())

...