2011-11-15 87 views
0

在我的用戶表,我有兩個用戶 試圖選擇與HQL查詢所有用戶,如下所示時:個createCriteria返回錯誤的列表大小VS HQL列表

getCurrentSession().createQuery("From User").list(); 

它返回兩個元素,這是右邊

但使用時個createCriteria如下:

getCurrentSession().createCriteria(User.class).list(); 

它返回36元件(所述兩個元件重複)!!!!

任何想法,爲什麼我得到這樣的行爲與createCriteria,是關係到休眠關係?因爲在用戶域我有ManyToMany與角色域的關係,是關係到會話工廠或Hibrenate版本或休眠配置?

關係:

@ManyToMany(fetch = FetchType.EAGER) 
    @JoinTable(name = "user_role", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") }) 
    private Set<Role> roles = new HashSet<Role>(0); 

我很困惑,請指教,謝謝。

回答

0

你有一個多對多的關係,渴望提取。標準查詢將被轉換爲帶有連接的SELECT,所以在結果中,每個用戶都有很多行。

要刪除重複項,請將所有結果添加到HashSet,或使用DistinctRootEntityResultTransformer。