112

このクエリのバリエーションを試し続けていますが、これを実現できないようです。この投稿も参照しました:参加に必要なパス! Nhibernate エラーが発生し、クエリに同じロジックを適用できないようです。私のUserオブジェクトにはUserGroupコレクションがあります。

クエリがオブジェクト内のエンティティを参照する必要があることは理解していますが、私が見ているものから...

@NamedQuery(
  name = "User.findByGroupId",
  query =
    "SELECT u FROM UserGroup ug " +
    "INNER JOIN User u WHERE ug.group_id = :groupId ORDER BY u.lastname"
)
4

3 に答える 3

142
select u from UserGroup ug inner join ug.user u 
where ug.group_id = :groupId 
order by u.lastname

名前付きクエリとして:

@NamedQuery(
  name = "User.findByGroupId",
  query =
    "SELECT u FROM UserGroup ug " +
    "INNER JOIN ug.user u WHERE ug.group_id = :groupId ORDER BY u.lastname"
)

あるエンティティから別のエンティティへのパスを HQL ステートメントで使用します。詳細については、HQL と結合に関する Hibernate のドキュメントを参照してください。

于 2012-05-04T12:40:28.573 に答える
76

ユーザーへの関連付けを保持するエンティティに名前を付ける必要があります。例えば、

... INNER JOIN ug.user u ...

これは、エラー メッセージが訴えている「パス」です。つまり、UserGroup から User エンティティへのパスです。

Hibernate は、結合条件がマッピング メタデータで宣言されている宣言的な JOIN に依存しています。これが、パスがないとネイティブ SQL クエリを作成できない理由です。

于 2012-05-04T12:39:06.850 に答える