如何使用HQL选择@OneToMany(mappedBy))集合的大小

时间:2011-08-11 10:29:38

标签: hibernate hql

首先是一些背景和解释:

我编写了以下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>

parentGroupLogicalGroup中的另一个字段。 (每个组包含一组子组和父组)。

  • 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

0 个答案:

没有答案