2016-09-15 43 views
0

我有以下映射
1用户可以有0个或更多角色。
加入一对多的关系多次返回相同的实体

查询
从用户U连接抓取u.roles

如果用户1有两个作用RoleA和RoleB。
然后User1返回两次。

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

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

回答

2

见JPA规范4.4.5.3

SELECT d FROM Department d LEFT JOIN FETCH d.employees WHERE d.deptno = 1 

抓取连接具有相同连接语义作为相应的内部连接或外部连接,但不包括在查询中查询 结果或其他引用中不返回连接操作右边的 上指定的相关对象。因此,例如,如果 部门1有五名员工,则上述查询将返回五个参照部门1实体的 。

选项

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

感谢Entity Graph提示。 请回答http://stackoverflow.com/questions/39507887/behavior-of-distinct-root-entity – Piyush

2

用户下面的代码:

criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 

有关详情,请点击此链接: Hibernate Criteria returns children multiple times with FetchType.EAGER

+0

如果我拥有用户 - >角色 - >许可权,那么会发生什么。 请问criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);按预期返回结果? – Piyush

相关问题