Проблема поиска и сортировки в JPA со списком объектов - PullRequest
1 голос
/ 06 ноября 2019

Допустим, у меня есть две сущности: первая

//Annotations skipped
public class Person {
    List<Name> names;
    //getter,setter
}

public class Name {
     String name;
     //getter, setter
}

Я хочу искать и сортировать по имени с помощью JPA (Hibernate)

Я пишу запрос как;

SELECT entity FROM person entity LEFT JOIN entity.names as names
WHERE names.name like :keyword ORDER BY names.name

Когда есть одно имя лично, нет проблем. Но если существует более одного имени, JPA возвращает Person для каждого имени. Если я использую Distict на этот раз, Hibernate предупреждает меня, чтобы отдельные должны иметь порядок по частям.

Как я могу решить эту проблему

1 Ответ

0 голосов
/ 06 ноября 2019

Я рекомендую вам составить список всех ваших людей, скажем List<Person> persons, а затем отсортировать список, используя Collections.sort(persons, customComparator);, где ваша реализация Comparator может выглядеть следующим образом:

class CustomPersonComparator implements Comparator<Person>{

    @Override
    public int compare(Person o1, Person o2) {
        return 0;//TODO for you: perform your names comparision here and return int comparison result accordingly.
    }
}

Вы можетечитать о значении компаратора здесь

...