0
SELECT * FROM [ScoreVersion] sv WHERE [Version_No] in (SELECT max([Version_No])
FROM [ScoreVersion] GROUP BY [score_id] MIT [score_id] = sv. [Score_id])benötigen Kriterien für die Suche nach folgenden
SELECT * FROM [ScoreVersion] sv WHERE [Version_No] in (SELECT max([Version_No])
FROM [ScoreVersion] GROUP BY [score_id] MIT [score_id] = sv. [Score_id])benötigen Kriterien für die Suche nach folgenden
Sie einen DetachedCriteria
schreiben können Sie eine Liste von score_id, max(version_no)
Paare zu bekommen und Machen Sie eine Multi-Eigenschaft IN()
mit Ihrer äußeren Criteria
.
DetachedCriteria subQuery = DetachedCriteria.forClass(ScoreVersion.class);
subQuery.setProjection(
Projections.projectionList()
.add(Projections.groupProperty("scoreId"))
.add(Projections.max("versionNumber")
)
);
Criteria criteria = this.getSession().createCriteria(ScoreVersion.class);
criteria.add(
Subqueries.propertiesIn(new String[] {"scoreId", "versionNumber"}, subQuery)
);
Die resultierende SQL unter der Decke sollte wie folgt aussehen:
select * from [ScoreVersion] where ([score_id], [Version_No]) in (
select [score_id], max([Version_No]) from [ScoreVersion] group by [score_id]
);
Vor 4 bis Hibernate:
Sie haben würde die Abfrage in HQL schreiben:
Query query = session.createQuery(String sql);
Hier ist Ihre Abfrage:
select sv from ScoreVersion sv
where (sv.scoreId, sv.versionNumber) in (
select sub.scoreId, max(sub.versionNumber)
from ScoreVersion sub
group by sub.scoreId
)
Dean Clark, ich benutze Hibernate 3.jar, Unterabfragen.propertiesIn Methode nicht in dieser Version Born. –
Es wurde mit Hibernate 4 (https://hibernate.atlassian.net/browse/HHH-6766) hinzugefügt. Wenn Sie upgraden können, großartig ... sonst müssen Sie die Abfrage in HQL schreiben –