2016-04-15 80 views
0

我对HQL相对较新。我注意到的一点是,当你添加返回字段时,它可以返回更少的结果。当添加了返回字段时,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字段的添加。

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

如果是这样的话 - 有什么办法可以解决这个问题吗?这个字段是空的或空的 - 而不是跳过整个条目?

在此先感谢。

回答

0

在您的域不等于空 后缀您可以将检查!= NULL

2

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

从SQL的角度来看,如果对表B的连接失败,那么从表A到列X的直接连接将不会返回A的行(即,表B中没有包含索引列的行表A)。

在SQL本地语言中,这是JOIN或NATURAL JOIN情况(取决于您想要通过的术语)。

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

实际上,如果添加后缀,如果它是一对多的关系,我也可以在上面得到更多的行。所以如果在A中每行有n个后缀,那么你会有n * sizeof(A)行。