HQL Уникальные результаты в запросе ManyToMany - PullRequest
0 голосов
/ 22 апреля 2011

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

Пользователь имеет ManyToMany с брендами.

Например, я хочу вытащить List<Employee> из БД.

s.createQuery("FROM User user INNER JOIN user.brands brands WHERE brands IN(1,2)");//(1,2) = :brands

В этой ситуации я получу одного и того же пользователя более одного раза, поскольку к нему подключено несколько брендов.

Как можно запросить Бренд, не позволяя повлиять на мои результаты без необходимости различения?

Это пользовательский объект:

    public class User  {
        @Id
        @Column(name="USER_ID")
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Integer userId;

        @ManyToMany(fetch=FetchType.EAGER)
        @JoinTable(name="USERS_BRANDS" , joinColumns = {@JoinColumn(name="USER_ID")},inverseJoinColumns={@JoinColumn(name="BRAND_ID")})
        private Collection<Brand> brands;
        ...other members
        ...getters and setters
}

Спасибо

1 Ответ

4 голосов
/ 23 апреля 2011

добавьте ключевое слово DISTINCT в запрос (сразу после ключевого слова SELECT , которое также необходимо добавить):

s.createQuery("SELECT DISTINCT user FROM User user INNER JOIN user.brands brands WHERE brands IN(1,2)");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...