2016-05-27 2 views
1

は:あなたが見るかもしれませんがFetchTypes私は<code>Spring Data</code>を使用し、次のクエリを定義しています

@Query("SELECT u FROM AppUser u LEFT OUTER JOIN fetch u.userRights a LEFT OUTER JOIN fetch u.userGroups g LEFT OUTER JOIN fetch u.userGroups ug LEFT OUTER JOIN FETCH ug.groupRights where u.login = :login") 
public Optional<AppUser> findOneWithCompleteRights(@Param("login") String login); 

、私は彼のすべてのアクセス権を持つユーザーでログインして戻って取得したいです。私は次のようにチェックしている

Caused by: javax.persistence.PersistenceException: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags 

Multiple fetches with EAGER type in Hibernate with JPA

私はjava.util.Setにすべて@XXXToManyタイプを変更した場合、それは動作しますが、私は私の上のタイプを決定したい春のアプリケーションを起動するが、それはに実行されます独自...

@Queryメソッドにアタッチされている場合、リンクされたソリューション(下を参照)の他の注釈は無視されるようです。とにかく、第二は意味をなさないでしょう。

  • ロードは、各コレクションを個別にインデックス列@IndexColumn(name="LIST_INDEX")

を追加することによって、代わりに、袋のリストの副選択@Fetch(FetchMode.SELECT)

  • フォースの使用量を使用して誰もが、むしろSetにタイプを設定するよりも、別の解決策を持っていますか?

  • 答えて

    0

    この問題もありました。 ロードするクラスに、List型のプロパティが複数マッピングされている場合に発生します。

    あなたはjava.util.Setにはjava.util.Listから AppUser.userRightsとAppUser.userGroups の種類を変更することで 、ということを解決することができます。

    +0

    [OK]を私はすでに私の質問でこの解決策を説明し、別の解決策があるかどうか尋ねた:) –

    関連する問題