2014-09-10 80 views
1

我有3個包含多對多關係的表。 User,Compurets,第三個表是連接其他的User_Comp。一個用戶可以通過id向他分配幾臺計算機。所以表中有幾個用戶實體。標準多次返回同一個對象

這裏是我的表:

enter image description here

爲了得到所有用戶的這種方法提供了正確的數據。

public List<User> getAllUsers() { 
     Session session = HibernateUtil.openSession(); 
     return session.createQuery("from User").list(); 
} 

但是當我使用方法與標準,如:

public List<User> getAllUsers() { 
    return currentSession().createCriteria(User.class).list(); 

它返回多個相同的記錄如在圖所示。至於我能理解它使用表User_Comp,因爲 迭代器返回:

User {Id= '1', login= 'user1', password= '1', name= 'userOne'… 
User {Id= '2', login= 'user2', password= '2', name= 'userTwo'… 
User {Id= '3', login= 'user3', password= '3', name= 'userThree'… 
User {Id= '3', login= 'user3', password= '3', name= 'userThree'… 
User {Id= '3', login= 'user3', password= '3', name= 'userThree'… 
User {Id= '3', login= 'user3', password= '3', name= 'userThree'… 
User {Id= '4', login= 'user4', password= '4', name= 'userFour'… 
User {Id= '5', login= 'user5', password= '5', name= 'userFive'… 

問:我有什麼,以便從表中獲取的用戶數據或獲取唯一的記錄,爲每個用戶做什麼?

回答

3

我猜測用戶>計算機關係沒有被設置爲懶惰,因此在外部加載了所有的計算機加入到從用戶填充getComputers

可以使用

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

只迭代每個實體一次

+0

是的。其作品。非常感謝你! – Devour 2014-09-10 10:51:14