1

私は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 つ追加するだけで済みます。eventIdEventClienteventId

4

2 に答える 2