我有两张桌子:
Client (clientId, firstName, lastName, gender)
Event (clientId, eventId)
我需要使用 Criteria 表示类似于以下内容的查询:
SELECT c.clientId, c.firstName, c.lastName, c.gender, MAX(eventId)
FROM Client c JOIN Event e ON c.clientId = e.clientId
GROUP BY c.clientId, c.firstName, c.lastName, c.gender
我试过这个:
final Criteria criteria = session.createCriteria(Client.class);
criteria.setFetchMode("Event", FetchMode.JOIN);
criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("clientId")).add(Projections.max("eventId")));
但它会在消息的最后一行引发异常:
HibernateQueryException:无法解析属性:eventId of:客户端
如何指定表之间的联接,该Client
表本身不包含与事件表相关的clientId
列,但表上的列Event
是返回表的外键Client
?
正如你所看到的,它真的被排除在外了Client
,我只需eventId
要从Event
表中选择最大值。此外,正如我所提到的,我正在尝试对基于Client
该类的现有 Criteria 查询进行更改。它用于检索所有活动客户端的所有列。我只需要在查询结果中添加一列 - 最大值eventId
。