私は2つのテーブルを持っています:
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
Client
イベントテーブルに関連する列を含まないが、テーブルのclientId
列がEvent
テーブルへの外部キーであるテーブル間の結合を指定するにはどうすればよいClient
ですか?
ご覧のとおり、実際にはテーブルから追い出されており、テーブルからClient
最大値を選択するだけで済みます。また、前述したように、クラスに基づく既存の Criteria クエリを変更しようとしています。すべてのアクティブなクライアントのすべての列を取得するために使用されます。クエリ結果に追加の列を 1 つ追加するだけで済みます。eventId
Event
Client
eventId