如何创建一个JPQL来拉出具有多个子集合的父树,并避免Hibernate非法尝试取消引用集合

时间:2012-11-04 18:54:26

标签: java hibernate jpa

我正在尝试模仿针对特定情况的急切获取。我使用spring-data-jpahibernate 4.1作为实现。我有UserRoleRightRoleUser具有多对多字段,因此会将其映射为实体RoleUserRoleRight也在many-to-many映射为实体RoleRight

我想在需要时将用户的所有权利和角色加载到应用程序的Authorization机制中。以下查询提供了illegal attempt to dereference collection

   List<Role> roles = (List<Role>)em.createQuery("select r from RoleImpl r JOIN FETCH r.roleRightMap rrm JOIN FETCH rrm.right ur WHERE r.userRoleMap.user.ID=:id ")
            .setParameter("id", ID).getResultList();

如何重写加载角色及其映射感谢。

1 个答案:

答案 0 :(得分:0)

抱歉,没关系。这是一种疏忽。

查询应该是这样的:

select r from RoleImpl r LEFT JOIN FETCH r.roleRightMap rrm LEFT JOIN FETCH r.userRoleMap urm WHERE urm.user.ID=:id