我有一对多关系中的 2 个类和一个有点奇怪的 HQL 查询。即使我已经阅读了一些已经发布的问题,对我来说似乎也不清楚。
Class Department{
@OneToMany(fetch=FetchType.EAGER, mappedBy="department")
Set<Employee> employees;
}
Class Employee{
@ManyToOne
@JoinColumn(name="id_department")
Department department;
}
当我使用以下查询时,我得到重复的 Department 对象:
session.createQuery("select dep from Department as dep left join dep.employees");
因此,我必须使用不同的:
session.createQuery("select distinct dep from Department as dep left join dep.employees");
这种行为是预期的吗?我认为这是不寻常的,因为将它与 SQL 进行比较。
原文由 bogdan.herti 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个问题在 Hibernate FAQ 上有详细解释:
List result = session.createCriteria(Order.class) .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) .list();
List result = session.createQuery(“select o from Order o left join fetch o.lineItems”) .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) // Yes, really! .list();
List result = session.createQuery(“select distinct o from Order o left join fetch o.lineItems”).list();
”`