我有一个Address类类型,它有一个Employees集合(在那里工作)。
从类类型到地址的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();
现在地址是25个地址的列表(每个地址有5个员工&#39;),每个地址重复5次。为什么是这样?这是我的问题。
如果在地址的hibernate映射中,
<set
name="employees"
inverse="true"
lazy="false"
fetch="select"
>
然后就可以了,地址有5个条目,每个条目都有5个员工的集合。
答案 0 :(得分:1)
尝试将DISTINCT添加到您的查询中:criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Join fetch将JOIN语句添加到查询,其中fetch类型select使用其他SELECT来检索关系数据,请参阅:http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#performance-fetching