2012-09-01 123 views
1

我有一个这样的实体(遗漏任何不必要的代码):休眠 - 实体集合

class Client{ 
    private id; 
    @OneToMany(mappedBy = "client", fetch = FetchType.EAGER) 
    private Set<Remark> remarks = new HashSet<Remark>(); 
    //getters and setters 
} 

我通话清单的客户端= session.createCriteria(Client.class)。如果客户端有多个备注,我会得到多个相同的客户端对象,例如,如果客户端有两个备注,则在列表中有两个相同的客户端。我不认为这是好行为,我错过了什么?

+1

用这段代码很难确定问题。你能发布客户和备注之间的全部关系吗?以及如何初始化客户列表。 – manix

+0

这是预期的行为。看到这篇文章 http://stackoverflow.com/questions/1995080/hibernate-criteria-returns-children-multiple-times-with-fetchtype-eager – nsfyn55

回答

0

不幸的是,你似乎必须使用criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 才能得到你想要的。看看nsfyn55粘贴的链接。

0

我看起来并不像您使用HQL,但为了完整性,另一种解决方法是在HQL中使用distinct关键字。我相当肯定,像下面这样的HQL查询也可以解决您的问题。

select distinct c from Client c where c.id = ?