I'm using spring-hibernate and using HibernateDAOSupport class. I have two tables mapped to each other in one-to-many fashion. I'm implementing the below criteria
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" ) )
;
this works well and create the below query
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
In result, it returns a list of object[]
. But I want that it should return List<App>
(App is the class on which I implemented/created the criteria).
I want that it would create the query
select
this_
from
apps this_
inner join
huapps huapp1_
on this_.id=huapp1_.appid
group by
this_.id
order by
y1_ desc
Please help me in writing the correct criteria.
I also tried with sqlProjection()
but even that didn't work.
Is there any way I can achieve this?
You try to add orger for new critheria that is result of function detachedCriteria.createCriteria("huApps", "hu")
. This function return the new criteria for class of huApp property.
Try to replace you criteria like this:
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();
It works well for me.
Try calling
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))
This should map the properties alias to the fields of the bean that you specify. App will need setters and getters on the appropriate fields
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With