0
SELECT * FROM [ScoreVersion] sv WHERE [Version_No] in (SELECT max([Version_No])
FROM [ScoreVersion] GROUP BY [score_id] HAVING [score_id] = SV [score_id])需要标准以下查询
SELECT * FROM [ScoreVersion] sv WHERE [Version_No] in (SELECT max([Version_No])
FROM [ScoreVersion] GROUP BY [score_id] HAVING [score_id] = SV [score_id])需要标准以下查询
你可以写一个DetachedCriteria
让你的score_id, max(version_no)
对的列表和与您的外部Criteria
做一个多属性IN()
。
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)
);
盖下产生的SQL应该是这个样子:
select * from [ScoreVersion] where ([score_id], [Version_No]) in (
select [score_id], max([Version_No]) from [ScoreVersion] group by [score_id]
);
此前休眠4:
你不得不编写查询在HQL:
Query query = session.createQuery(String sql);
其中您的查询是:
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,我使用hibernate 3.jar,Subqueries.propertiesIn方法没有在这个版本中获得。 –
它被添加了Hibernate 4(https://hibernate.atlassian.net/browse/HHH-6766)。如果你可以升级,很好......否则你需要在HQL中编写查询 –