我有以下映射
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