Hibernate 案例,其中fetch=";加入;给出重复的结果

Hibernate 案例,其中fetch=";加入;给出重复的结果,hibernate,Hibernate,我有一个Address类类型,它有一个雇员集合(在那里工作) 从类类型到Hibernate的地址映射包含: <set name="employees" inverse="true" lazy="true" fetch="join" > 此外,还有5个地址实例,每个地址有5个员工的工作地址 在申请中 org.hibernate.Criteria criteria=session.createCriteria(Address.class); crit

我有一个Address类类型,它有一个雇员集合(在那里工作)

从类类型到Hibernate的地址映射包含:

<set
    name="employees"
    inverse="true"
    lazy="true"
    fetch="join"
>

此外,还有5个地址实例,每个地址有5个员工的工作地址

在申请中

org.hibernate.Criteria criteria=session.createCriteria(Address.class);
criteria.add(Restrictions.like("zipcode", "%Work"));
List<Address>addresses=criteria.list();
org.hibernate.Criteria=session.createCriteria(Address.class);
添加(限制,如(“zipcode”,“Work”));
Listaddresses=criteria.list();
现在地址是一个25个地址的列表(每个地址有5个员工的地址),每个地址重复5次。为什么会这样?这是我的问题

如果在地址的hibernate映射中

<set
    name="employees"
    inverse="true"
    lazy="false"
    fetch="select"
>


然后是OK,addresses有5个条目,每个条目有5个员工的集合。

尝试将DISTINCT添加到查询中:
criteria.setResultTransformer(criteria.DISTINCT\u ROOT\u ENTITY)


Join fetch添加Join语句以查询fetch type select使用附加select检索关系数据的位置,请参阅:

@dpawel09关于您的问题的解决方案是正确的,但我很好奇为什么在集合中有
lazy=true
Join=fetch
?两者都是冲突的(“仅在请求时获取关联”和“在获取根实体时使用JOIN语句获取所有内容”)。存在lazy,因为我有时也将其设置为false,并且我认为lazy=true是默认值。