Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 一对多关系的Join Fetch多次返回同一实体_Hibernate_Jpa_Persistence_Hql_Jpql - Fatal编程技术网

Hibernate 一对多关系的Join Fetch多次返回同一实体

Hibernate 一对多关系的Join Fetch多次返回同一实体,hibernate,jpa,persistence,hql,jpql,Hibernate,Jpa,Persistence,Hql,Jpql,我有以下映射 1个用户可以有0个或多个角色。 查询 从用户u加入获取u角色 如果User1有两个角色RoleA和RoleB 然后返回User1两次 我所期望的是,User1应该返回一次,其中包含RoleA和RoleB的角色列表 我怎样才能解决这个问题 另外,请解释多对多关系的行为。用户代码如下: criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 有关更多详细信息,请查看此链接: 参见JPA规范4

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

查询
从用户u加入获取u角色

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

我所期望的是,User1应该返回一次,其中包含RoleA和RoleB的角色列表
我怎样才能解决这个问题

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

用户代码如下:

criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
有关更多详细信息,请查看此链接:
参见JPA规范4.4.5.3

SELECT d FROM Department d LEFT JOIN FETCH d.employees WHERE d.deptno = 1 
获取联接与相应的内部或外部联接具有相同的联接语义 外部联接,但在 查询中不会返回联接操作的右侧 结果或在查询中以其他方式引用。因此,例如,如果 department 1有五名员工,上面的查询返回五名员工 对部门1实体的引用

选择权

  • 您可以在
    SELECT
    子句中添加
    DISTINCT
    ,以筛选出 重复行
  • 为查询定义一个
    EntityGraph
    ,并向其中添加
    角色
    字段, 它将被提取,这意味着您在查询中省略了
    “FETCH JOIN”
  • roles
    字段标记为EAGER,但这将应用于该字段的所有获取,因此可能不可取

  • 如果我拥有用户->角色->权限所有多对多,会发生什么。Will criteria.setResultTransformer(CriteriaSpecification.DISTINCT\u ROOT\u实体);按预期返回结果?感谢实体图提示。请回答一位同事告诉我,出于性能原因,您可能希望将.setHint(“hibernate.query.passDistinctThrough”,false)添加到带有“DISTINCT”的命名查询中,如下所述()