首先是一些背景和解释:
我编写了以下HQL查询:
select size(childGroups), size(ipts), g.id, g.name, g.status from LogicalGroup g where g.isRoot=true group by g.id, g.name, g.status
LogicalGroup
是一个具有标量字段的实体:id, name, status, isRoot
和两个实体集合字段:
childGroups
是
@OneToMany(mappedBy = "parentGroup")
Set<LogicalGroup>
parentGroup
是LogicalGroup
中的另一个字段。 (每个组包含一组子组和父组)。
和
ipts
是
@OneToMany(mappedBy = "logicalGroup")
Set<IPT>
每个IPT
都有一个字段logicalGroup
,表示它所属的组。
我希望查询执行的操作是选择childGroups
集合的大小以及属于根ipts
的{{1}}集合的大小(其中LogicalGroup
} == TRUE)。只有一个组isRoot
== true。
逻辑组和IPT从超类isRoot
继承其id
个字段。表结构是每个类有一个表(超类也有自己的表)。父/子逻辑组或逻辑组/ IPT之间的关系没有连接表。
现在的问题是:
首先,我应该说查询正确返回标量值。
问题是查询出现以正确返回AbstractEntity
集的大小,但似乎在{{返回LogicalGroup
s的总数1}}表,而不仅仅是属于IPT
的表。我哪里错了?查询有问题或者可能是集合的映射?
我打开了SQL日志记录,Hibernate生成并执行了以下内容:
IPT