【发布时间】:2016-09-25 20:59:03
【问题描述】:
我正在使用Spring Data 并定义以下查询:
@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);
如您所见,我想取回具有所有访问权限的登录用户。在启动spring应用程序时,它会遇到:
Caused by: javax.persistence.PersistenceException: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
我检查了以下内容: Multiple fetches with EAGER type in Hibernate with JPA
如果我将所有@XXXToMany 类型更改为java.util.Set,它可以工作,但我想自己决定类型...
如果附加到@Query 方法,链接解决方案的其他注释(见底部)似乎会被忽略。无论如何,第二个没有意义。
- 使用子选择
@Fetch(FetchMode.SELECT)分别加载每个集合 - 通过添加索引列
@IndexColumn(name="LIST_INDEX")强制使用列表而不是包
除了将类型设置为Set之外,还有其他解决方案吗?
【问题讨论】:
标签: spring hibernate jpa spring-data