我有下面寫在HQL命名查詢:休眠聯同條件獲取的右側聯接
query = "select u from User u " +
"join fetch u.devices d " +
"join fetch u.ipRestrictions ir " +
"join fetch u.employees e where " +
"u.login = :login and " +
"u.enumDataState.id = :dataStateId and " +
"d.enumDataState.id = :dataStateId and " +
"ir.enumDataState.id = :dataStateId and " +
"e.enumDataState.id = :dataStateId ")
當我執行它,我通過電子郵件和dataStateId值。我可以在數據庫表中看到,有一個具有給定電子郵件和dataStateId的用戶,但我沒有得到任何結果。
查詢的目的是爲join fetch
激活的用戶(dataStateId告訴用戶是否激活)與給定的電子郵件與設備,ipRestrictions和僱員也是活躍的。
我已經看到了一些在stackoverflow上的答案,一些建議使用left join fetch
但left join fetch
也沒有工作。
我相信,有一個用戶具有給定的電子郵件和給定的dataStateId,因爲我可以在數據庫數據編輯器中看到他。
我該如何解決這個問題?這是一個巨大的問題,因爲我會有很多這樣的功能,我需要使用一些條件檢查join fetch
的右側。
我正在使用Hibernate v5.2。
查詢指定你正在尋找一個用戶登錄「與用戶狀態/設備狀態/ iprestriction狀態/員工狀態全部同時處於與您相同的狀態。你確定你的數據集有這樣的用戶? (您只能說出用戶和用戶狀態,而不是其他信息。) – wargre
查詢必須返回電子郵件和狀態匹配的用戶,以及狀態也處於活動狀態的其他對象(可選)。因此,如果有匹配的用戶,但它沒有任何匹配的設備,我希望無論如何都能獲取用戶,但只有空設備列表。我正在使用連接提取來避免1 + n查詢問題。 –