我有以下映射
1用户可以有0个或更多角色。
查询
来自User u JOIN Fetch u.roles
如果User1有两个角色RoleA和RoleB。
然后User1返回两次。
我期望的是User1应该返回一次包含RoleA和RoleB的角色列表
我怎样才能解决这个问题。
另请解释多对多关系的行为。
答案 0 :(得分:3)
参见JPA规范4.4.5.3
SELECT d FROM Department d LEFT JOIN FETCH d.employees WHERE d.deptno = 1
获取连接具有与相应内部或相同的连接语义 外连接,除了指定的相关对象 查询中不返回连接操作的右侧 结果或以其他方式在查询中引用。因此,例如,如果 部门1有五名员工,上面的查询返回五名 对部门1实体的引用。
选项
DISTINCT
子句中添加SELECT
来过滤掉
重复的行。 EntityGraph
并向其添加roles
字段,
它将被获取,这意味着您省略了查询中的"FETCH JOIN"
。roles
字段标记为EAGER,但这会适用于该字段的所有提取,因此可能不合适。答案 1 :(得分:2)
用户在代码下面:
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
有关详细信息,请查看此链接: Hibernate Criteria returns children multiple times with FetchType.EAGER