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
Post a Comment