我有以下设置:

在其中具有TrunkBean的CallRegistry bean和TrunkBean具有Operator Bean。

按照我的标准,我添加:

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


我需要在结果列表上使用GSON来填充数据表,但问题是结果列表始终在对象内返回TrunkBean,OperatorBean和CallRegistry。


resultadoQuery是list()之后的queryResult
troncoBean是主干,operadora是运算符,rlBean是callRegistry

我该怎么做才能对此进行过滤,并仅使CallRegistry bean出现在结果中?
这有可能吗?还有其他替代方法可以解决此问题吗?

这也已经完成了(注释这两行就可以解决问题):

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


为什么要中断?

最佳答案

当您调用criteria.setProjection(null);时,ResultTransformer是用PassThroughResultTransformer配置的,并且此转换器仅返回带有您声明的别名的array

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

例如,在您注释total = (Number) criteria.setProjection(Projections.rowCount()).uniqueResult();的第一行中,结果将是查询将返回的行数,就像SELECT count(*)一样。

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

09-09 22:37