2016-09-10 12 views
0

が、私は私のリポジトリに次のクエリを持ってどこに参加残しました。 すべて正常に動作し、ユーザーのプロジェクトを返しますが、各プロジェクトで対応するユーザーセットが返されるようにします。春データJPAはフェッチと句

UPDATE:

SELECT p FROM Project p JOIN FECTH p.users JOIN p.users u WHERE u.login =:login 

しかし、今、私は、次の例外が発生しました::mateuszloが示唆したように次のことを試してみました

nested exception is java.lang.IllegalArgumentException: Count query validation failed for method public abstract org.springframework.data.domain.Page com.example.app.repository.ProjectRepository.findAllByUserLo‌​gin(java.lang.String‌​,org.springframework‌​.data.domain.Pageabl‌​e)! org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list 

答えて

1

それを使用するクエリのJOIN FETCHための名前のエイリアスを作成することは不可能ですそれはWHEREステートメントにあります。 JPAはこれを許可しません。これは、容易に望ましくない状況につながる可能性があるためです。

X:Project X:3,Users:John、Tom and Mikeを考えてみましょう。ユーザーJohnがProject Xを返すプロジェクトをFETCH JOINで照会すると、User - Johnの1つのみが返されます。これにより、不完全なProjectエンティティが生成されますが、これは現在のデータベースの状態と矛盾します。

あなたがしなければならないことは、2回参加することです。 UsersをcorrespodingフェッチしFETCH JOINで2番目の時間を適切Projetレコードを識別し、する通常のJOINで初めて、:

SELECT p FROM Project p 
JOIN FETCH p.users 
JOIN p.users u WHERE u.login =:login 
+0

おかげでmateuszlo。既に試しましたが、次の例外があります。ネストされた例外はjava.lang.IllegalArgumentExceptionです:メソッドのカウントの検証が失敗しましたpublic abstract org.springframework.data.domain.Page com.example.app.repository.ProjectRepository.findAllByUserLogin(java.lang .String、org.springframework.data.domain.Pageable)! org.hibernate.QueryException:クエリで指定された結合フェッチが見つかりましたが、フェッチされた関連付けの所有者が選択リストに存在しませんでした –