2016-09-15 73 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

相關問題