我有3个表与多对多关系。 User,Compurets和第三个表是User_Comp,用于连接其他人。一个用户可以通过 id 向他分配多台计算机。因此,表中有几个User实体。
这是我的表:
为了获得所有用户,此方法可以提供正确的数据。
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'…
问题:为了从表用户那里获取数据或为每个用户获取唯一记录,我必须做些什么?
答案 0 :(得分:3)
我猜用户&gt;计算机关系未设置为懒惰,因此它会加载外部联接中的所有计算机以从用户填充getComputers
你可以使用
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
只迭代每个实体一次