mysql - How to retrieve items with hibernate clustered by to_days + COUNT(*) -


i pretty new hibernate again, might noobish question ;).

without to_days, clustered timestamp works this:

    criteriaquery<tuple> query = criteriabuilder.createquery(tuple.class);     root<session> sessionroot = query.from(session.class);     query.multiselect(                 sessionroot.get("time").alias("time"),                 criteriabuilder.count(sessionroot).alias("count")             );     query.groupby(sessionroot.get("time"));     list<tuple> results = this.executequery(query); 

so recieve:

time|count 13721938721|1 13721938722|2 13721938723|3 13721938724|4 13721938725|2 13721938726|1 13721938727|4 

but sessioncounts each millisecond, need clustered day , not timestamp: use to_days in plain mysql.

in mysql perform query:

select to_days(`time`) `days`, count(*) `count` sessions 1 group `days` 

this gives me:

days|count 777594|123 777595|60 777596|61 777597|74 

but have no idea, yet: how achieve same thing javax.persistence.criteria.criteriabuilder , criteriaquery in hibernate?

i dont know how criteriabuilder, know how in hibernate 4 criteria api:

query.setprojection(     projections.sqlprojection(         "to_days(time) days",         new string[]{"days"},         new type[]{standardbasictypes.integer}     ) ); 

sqlprojection allows cast or convert data types, careful, using projection retrieve fileds specify in it, , resulting list come this:

 list<object[]> results = this.executequery(query); 

but can make hibernate alias match properties using result transformer:

query.setresulttransformer(new aliastobeanresulttransformer(session.class)); 

and list comes out does:

list<session.class> results = this.executequery(query); 

sorry not provide criteriabuilder solution, hope gets in right track.


Comments

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -