多对多查询中的 HQL 唯一结果

fat*_*zzy 1 java many-to-many hql unique

我有多个品牌的应用程序。
单个用户可以拥有多个品牌,几乎应用程序中的每个查询都通过其品牌来限制用户。

用户有 ManyToMany 和 Brand(s) 。

例如,我想List<Employee>从数据库中提取。

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

在这种情况下,我将不止一次获得同一个用户,因为该用户拥有多个与他相关的品牌。

如何在不需要不同的情况下查询品牌而不会影响我的结果?

这是用户实体:

    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
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Mat*_*mes 5

将关键字DISTINCT添加到您的查询中(紧跟在必须添加的SELECT关键字之后):

s.createQuery("SELECT DISTINCT user FROM User user INNER JOIN user.brands brands WHERE brands IN(1,2)");
Run Code Online (Sandbox Code Playgroud)