HQL Unique会导致ManyToMany查询

时间:2011-04-22 19:53:03

标签: java many-to-many hql unique

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

用户拥有带商标的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 个答案:

答案 0 :(得分:4)

DISTINCT 关键字添加到您的查询中(在 SELECT 关键字之后,必须同时添加):

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