[Java Hibernate] HQL statement na Criteria

Programovacie jazyky, rady, poradňa...
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

[Java Hibernate] HQL statement na Criteria

Príspevok od používateľa mirak2 »

rozhodol som sa, ze pricuchnem trochu k Springu a Hibernatu, kedze v robote robim s inymi technologiami a rozbehavam webovu appku pre moj hokejbalovy tim. V podstate vsetko pekne bezi, akurat vsetky query mam robene pomocou hql statementov a drviva vacsina je priserne dlha a komplikovana, takze v ramci optimalizacie (a naucenia sa niecoho noveho) ich chcem previest na Criteria. problem je v tom, ze vacsina tutorialov riesi len trivialne query statementy a lahke priklady.
mam napr. takyto query statement:

Kód: Vybrať všetko

SELECT season.player AS player, SUM(season.goals) AS goals, SUM(season.assists) AS assists, SUM(season.playedMatches) AS playedMatches, SUM(season.penaltyMinutes) AS penaltyMinutes, SUM(season.minutesPlayed) AS minutesPlayed, SUM(season.goalsAgainst) AS goalsAgainst FROM Season season WHERE TEAM_ID = :team and LEAGUE = :league GROUP BY season.playerId ORDER BY SUM(season.goals) + SUM(season.assists) DESC, goals DESC, playedMatches ASC
asi som hlupy, ale neviem ako poskladat vsetky restrictions a orders a group by, aby to fungovalo k vseobecnej spokojnosti.
vincibb
Zablokovaný
Zablokovaný
Príspevky: 2
Registrovaný: 03 jún 2015, 8:26

Re: [Java Hibernate] HQL statement na Criteria

Príspevok od používateľa vincibb »

Nedavno som riesil podobny problem v praci ked som potreboval groupovat podla poslednych dvoch znakov stlpca. V tvojom pripade by to mohlo vyzerat nasledovne

Kód: Vybrať všetko

Criteria criteria = hibernateSession
                .createCriteria(Season.class);
        criteria.add(Restrictions.eq("team_id", team));
        criteria.add(Restrictions.eq("league", league));
        criteria.setProjection(Projections
                .projectionList()
                .add(Projections.property("player").as("player"))
                .add(Projections.sum("goals").as("goals"))
                .add(Projections.sum("assists").as("assists"))
                .add(Projections.sum("playedMatches").as("playedMatches"))
                .add(Projections.sum("penaltyMinutes").as("penaltyMinutes"))
                .add(Projections.sum("minutesPlayed").as("minutesPlayed"))
                .add(Projections.sum("goalsAgainst").as("goalsAgainst"))
                .add(Projections.sqlProjection(
                        "sum(goals) + sum(assists) as total",
                        new String[] { "total" },
                        new Type[] { StandardBasicTypes.INTEGER }), "total")
                .add(Projections.groupProperty("player")));
        criteria.addOrder(Order.desc("total"));
        criteria.addOrder(Order.desc("goals"));
        criteria.addOrder(Order.desc("playedMatches"));
mirak2
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6719
Registrovaný: 18 sep 2005, 13:44
Bydlisko: Prague, CZE / Kosice, SVK

Re: [Java Hibernate] HQL statement na Criteria

Príspevok od používateľa mirak2 »

dakujem, vyskusam vecer doma... a nebude problem to, ze v Season nemam field total ani ziaden pre to urceny a nebude to mat Hibernate kam namapovat? ci najjednoduchsie je ho tam pridat?
vincibb
Zablokovaný
Zablokovaný
Príspevky: 2
Registrovaný: 03 jún 2015, 8:26

Re: [Java Hibernate] HQL statement na Criteria

Príspevok od používateľa vincibb »

Ak sa nemylim tak v pripade pouzitia Criteria je potrebne mapovat na existujuci field. Cize ak by total neexistoval v Season tak by ti to zahucalo
Napísať odpoveď