HQL returns 重复对象

HQL returns duplicate objects

我有两个关于 HQL 用法的问题

  1. 我有如下查询,但它 returns 重复 rows/objects,添加 DISTINCT 关键字可以解决问题,但有人可以解释一下,为什么我们在这里需要 distinct,可以'我们不能没有它吗?

    select st from State st inner join fetch st.cities
    
  2. HQL 文档说

    A fetch join does not usually need to assign an alias, because the associated objects should not be used in the where clause (or any other clause).

    但是为什么我们不能在where子句中使用关联对象,如果我们既想急切又想加条件怎么办呢?

  1. 仅仅是因为 HQL 和 JPQL 就是这样指定的:JDBC 结果集的每一行返回一个元素,除非您使用不同的。

  2. 因为如果允许您对获取的实体添加限制,您会破坏实体本身的不变量,即 Hibernate 和您自己的代码假设始终被验证:返回的城市state.getCities() 是该州的城市。他们都。不仅仅是那些碰巧符合随机查询的某些标准的。