我有以下映射
1用户可以有0个或更多角色。
加入一对多的关系多次返回相同的实体
查询
从用户U连接抓取u.roles
如果用户1有两个作用RoleA和RoleB。
然后User1返回两次。
我期望的是User1应该返回一次,包含RoleA和RoleB的角色列表
我该如何解决这个问题。
另请解释多对多关系的行为。
我有以下映射
1用户可以有0个或更多角色。
加入一对多的关系多次返回相同的实体
查询
从用户U连接抓取u.roles
如果用户1有两个作用RoleA和RoleB。
然后User1返回两次。
我期望的是User1应该返回一次,包含RoleA和RoleB的角色列表
我该如何解决这个问题。
另请解释多对多关系的行为。
见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,但是这将适用于该字段的所有提取,因此可能不合意。用户下面的代码:
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
有关详情,请点击此链接: Hibernate Criteria returns children multiple times with FetchType.EAGER
如果我拥有用户 - >角色 - >许可权,那么会发生什么。 请问criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);按预期返回结果? – Piyush
感谢Entity Graph提示。 请回答http://stackoverflow.com/questions/39507887/behavior-of-distinct-root-entity – Piyush