Вывод одного пользователя с двумя ролями - PullRequest
3 голосов
/ 09 мая 2020

У меня есть две сущности User и Role. У них однонаправленное соединение ManyToMany. Но при вызове списка пользователей по какой-то причине пользователь возвращается несколько раз с несколькими ролями.

Ниже я предоставил код и результат.

Результат

new pic

Дебаг

new pic

Код с запросами HQL

 public List<User> listUsers() {
     List resultList = manager.createQuery("SELECT u FROM User u LEFT JOIN FETCH u.roles").getResultList();
     return resultList;
 }

UPD:

Я нашел это решение:

public List<User> listUsers() {
    List resultList = manager.createQuery("SELECT u FROM User u LEFT JOIN FETCH u.roles")
            .unwrap(org.hibernate.Query.class).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
            .getResultList();
    return resultList;
}

Но criteria API медленный, это не рекомендуется использовать его, и он устарел.

Как мне отобразить одного пользователя с двумя ролями ???

1 Ответ

1 голос
/ 09 мая 2020

Необходимо добавить оператор distinct в ваш запрос, чтобы избежать множественных записей

 public List<User> listUsers() {
     List resultList = manager.createQuery("SELECT distinct u FROM User u LEFT JOIN FETCH u.roles").getResultList();
     return resultList;
 }
...