加入获取一对多关系多次返回同一实体

Piy*_*ush 3 persistence hibernate jpa hql jpql

我有以下映射
1 用户可以有 0 个或多个角色。


来自用户的查询u JOIN Fetch u.roles

如果 User1 有两个角色 RoleA 和 RoleB。
然后 User1 返回两次。

我期望的是 User1 应该返回一次,其中包含包含 RoleA 和 RoleB 的角色列表
我该如何解决这个问题。

还请解释多对多关系的行为。

Nei*_*ton 5

请参阅 JPA 规范 4.4.5.3

SELECT d FROM Department d LEFT JOIN FETCH d.employees WHERE d.deptno = 1 
Run Code Online (Sandbox Code Playgroud)

fetch join 与相应的内连接或外连接具有相同的连接语义,除了在连接操作右侧指定的相关对象不会在查询结果中返回或在查询中以其他方式引用。因此,例如,如果部门 1 有五个员工,则上述查询返回对部门 1 实体的五个引用。

选项

  1. 您可以DISTINCTSELECT子句中添加 a以过滤掉重复的行。
  2. EntityGraph为查询定义一个并将roles字段添加到它,它将被提取,这意味着您"FETCH JOIN"从查询中省略了。
  3. 将该roles字段标记为 EAGER,但这将适用于该字段的所有提取,因此可能不可取。