在
Criteria您提供的似乎只产生内部查询部分。您可以组合内部查询,例如通过使用
DetachedCriteria:
DetachedCriteria maxDateQuery = DetachedCriteria.forClass(FtpStatus.class);ProjectionList proj = Projections.projectionList();proj.add(Projections.max("datetime"));proj.add(Projections.groupProperty("connectionid"));maxDateQuery.setProjection(proj);Criteria crit = s.createCriteria(FtpStatus.class);crit.add(Subqueries.propertiesEq(new String[] {"datetime", "connectionid"}, maxDateQuery));List<FtpStatus> dtlList = crit.list();请注意,直到Hibernate
4.0.0.CR5(HHH-6766)才实现对多列子查询的支持。
对于本机SQL查询,
createSQLString如果希望在结果查询中使用显式列名,则Hibernate
可以直接使用您指定的查询字符串或添加的查询所涉及的实体。
String queryString = "SELECt {status.*}" + " FROM ftp_status status" + " WHERe (datetime, connectionid) IN (" + " SELECt MAX(datetime), connectionid" + " FROM ftp_status" + " GROUP BY connectionid" + " )";SQLQuery query = s.createSQLQuery(queryString).addEntity("status", FtpStatus.class);List<FtpStatus> dtlList = query.list();


