我正在使用spring-hibernate并使用HibernateDAOSupport类。 我有两个表以一对多的方式相互映射。 我正在实施以下标准
DetachedCriteria criteria = getCriteria( "a" )
.setProjection( Projections.projectionList()
.add( Projections.groupProperty("a.id" ) )
.add( Projections.count( "a.id" ), "count" )
)
.createCriteria( "huApps", "hu")
.addOrder( Order.desc( "count" ) )
;
这很有效并创建以下查询
select
this_.id as y0_,
count(this_.id) as y1_
from
apps this_
inner join
huapps huapp1_
on this_.id=huapp1_.appid
group by
this_.id
order by
y1_ desc
结果,它返回object[]
的列表。但我希望它应该返回List<App>
(App是我实现/创建标准的类)。
我希望它会创建查询
select
this_
from
apps this_
inner join
huapps huapp1_
on this_.id=huapp1_.appid
group by
this_.id
order by
y1_ desc
请帮我写出正确的标准。
我也试过sqlProjection()
,但即使这样也行不通。
有什么方法可以实现这个目标吗?
答案 0 :(得分:2)
尝试拨打
DetachedCriteria criteria = getCriteria( "a" )
.setProjection( Projections.projectionList()
.add( Projections.groupProperty("a.id" ), "id" )
.add( Projections.count( "a.id" ), "count" )
)
.createCriteria( "huApps", "hu")
.addOrder( Order.desc( "count" ) )
.setResultTransformer(Transformers.aliasToBean(App.class))
这应该将属性别名映射到您指定的bean的字段。应用程序需要在适当的字段上设置setter和getter
答案 1 :(得分:1)
您尝试为函数detachedCriteria.createCriteria("huApps", "hu")
的结果添加orger for new critheria。此函数返回huApp属性类的新条件。
尝试替换您的标准:
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(A.class);
detachedCriteria.setProjection(Projections.projectionList()
.add(Projections.groupProperty("id"))
.add(Projections.count("id"), "count")
);
detachedCriteria.createCriteria("huApps", "hu");
detachedCriteria.addOrder(Order.desc("count"));
List<A> list = detachedCriteria.getExecutableCriteria(getSession()).list();
它适用于我。