我有以下设置:
在其中具有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