添加返回字段时,HQL查询返回的结果较少

时间:2016-04-15 00:52:23

标签: hibernate hql hibernate-mapping

我对HQL相对较新。我注意到的是,当您添加返回字段时,它可以返回更少的结果。

例如,如果我运行以下查询:

select cit.noun.value, 
cit.type
from ComponentInventoryType cit 
where 
cit.deleted = false

我获得的结果比运行此查询的结果更多:

select cit.noun.value, 
cit.type,
cit.suffixes.suffix
from ComponentInventoryType cit 
where 
cit.deleted = false  

当然,两个查询之间的唯一区别是添加了cit.suffixes.suffix字段。

我的第一个猜测是,如果任何条目的后缀本身为空 - 它根本不会返回该条目?

如果是这种情况 - 是否有办法解决这个问题,以便该字段为空或为空 - 而不是仅仅跳过整个条目?

提前致谢。

2 个答案:

答案 0 :(得分:2)

通过添加cit.suffixes.suffix,您已从ComponentInventoryType表连接到后缀表。我猜你已经在包含后缀的集合周围映射了@OneToMany注释。

从SQL的角度来看,如果表B的连接失败,则从表A到表B的直接连接将不会从A返回一行(即,表B中没有行,其中有一个表A的索引列。

在SQL语言中,这是一个JOIN或NATURAL JOIN情况(取决于你想要的术语)。

在基本SQL中,您可以使用OUTER JOIN或LEFT OUTER JOIN来允许连接表(B)为空。

事实上,如果它是一对多关系,你可以在添加后缀时获得更多行,正如我上面所暗示的那样。因此,如果A中的每一行都有n个后缀,那么您将拥有n * sizeof(A)行。

答案 1 :(得分:0)

您可以添加检查字段不等于null的位置 后缀!= NULL