在Criteria列表中过滤实体()

时间:2014-08-07 19:07:47

标签: java hibernate criteria

我有以下设置:

一个CallRegistry bean,其中包含TrunkBean,而TrunkBean包含Operator bean。

在我的标准中我添加:

criteria.createAlias("callRegistry.trunk", "trunk");
criteria.createAlias("trunk.operator", "op");

我需要在结果列表中使用GSON来填充数据表,但问题是结果列表总是在Object中返回TrunkBean,OperatorBean和CallRegistry。

Valid XHTML。 resultadoQuery是list()之后的queryResult troncoBean是trunk,operadora是operator,rlBean是callRegistry

我可以做些什么来过滤这个并且只获得CallRegistry bean来得到结果? 这甚至可能吗?这个问题还有其他替代方案吗?

这也正在进行中(评论这两行解决了这个问题):

total = (Number) criteria.setProjection(Projections.rowCount()).uniqueResult();
criteria.setProjection(null)

为什么会这样?

1 个答案:

答案 0 :(得分:1)

当您致电criteria.setProjection(null); ResultTransformer配置了PassThroughResultTransformer时,此变换器只会返回一个array,其中包含您声明的别名。

如果要指定查询结果将是投影(本质上是标量),则只设置条件的投影。给定投影中包含的各个组件决定了查询结果的整体“形状”。

示例,在您评论{1}}的第一行中,结果将是您的查询返回的行数,就像total = (Number) criteria.setProjection(Projections.rowCount()).uniqueResult();一样。

有关如何使用投影的详细信息:http://docs.jboss.org/hibernate/orm/4.0/manual/en-US/html/querycriteria.html#querycriteria-projection