Criteria多次返回相同的对象

时间:2014-09-10 10:26:04

标签: hibernate criteria

我有3个表与多对多关系。 User,Compurets和第三个表是User_Comp,用于连接其他人。一个用户可以通过 id 向他分配多台计算机。因此,表中有几个User实体。

这是我的表:

enter image description here

为了获得所有用户,此方法可以提供正确的数据。

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

但是当我使用Criteria的方法时,例如:

    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'…

问题:为了从表用户那里获取数据或为每个用户获取唯一记录,我必须做些什么?

1 个答案:

答案 0 :(得分:3)

我猜用户&gt;计算机关系未设置为懒惰,因此它会加载外部联接中的所有计算机以从用户填充getComputers

你可以使用

 criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

只迭代每个实体一次