2016-05-27 13 views
1

ich Spring Data verwende und definieren folgende Abfrage:FetchTypes in Spring Data JPQL Query (MultipleBagFetchException)

@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); 

Wie Sie vielleicht sehen, möchte ich mit all seinen Zugriffsrechte Benutzer die angemeldet zurück. Während die Feder Anwendung starten, läuft es in:

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

ich folgendes überprüft haben: Multiple fetches with EAGER type in Hibernate with JPA

Wenn ich alle @XXXToMany Typen zu java.util.Set ändern, es funktioniert, aber ich möchte die Art entscheiden, auf meinem eigene ...

Die anderen Annotationen der verknüpften Lösung (siehe unten) scheinen ignoriert zu werden, wenn sie an die @Query Methode angehängt werden. Zweitens würde sowieso keinen Sinn ergeben. statt Tasche

  • laden jeweils separat Sammlung subselect @Fetch(FetchMode.SELECT)
  • Kraftnutzung Liste durch Hinzufügen von Indexspalte @IndexColumn(name="LIST_INDEX")

Hat jemand eine andere Lösung, anstatt die Einstellung der Typ Set mit?

Antwort

0

Ich hatte dieses Problem auch. Es passiert, wenn die zu ladende Klasse mehr als eine Eigenschaft vom Typ List zugeordnet hat. von java.util.List zu java.util.Set

Sie können das lösen, durch die Art der AppUser.userRights und AppUser.userGroups ändern.

+0

Ok, ich habe diese Lösung bereits in meiner Frage beschrieben und gefragt, ob es eine andere Lösung gibt :) –