我有两个表:
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: could not resolve property: eventId of: Client
如何指定 Client
表之间的联接,该表本身不包含与事件表相关的列,但包含 Event
上的 clientId
列> 表是返回 Client
表的外键吗?
正如您所看到的,它确实是由 Client
表驱动的,我只需要从 Event
表中选择最大的 eventId
。另外,正如我提到的,我正在尝试对基于 Client
类的现有 Criteria 查询进行更改。它用于检索所有 Activity 客户端的所有列。我只需向查询结果添加一列 - 最大 eventId
。
最佳答案
使用别名
Criteria criteria = session.createCriteria(Event.class, "et").
createAlias("et.Client", "ct").
setProjection(Projections.projectionList().
add(Projections.groupProperty("et.clientId")).
add(Projections.max("et.eventId")));
有关标准的更多详细信息,请参阅Criteria Queries
关于java - Hibernate Criteria 连接到包含外键的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15893044/