2013-06-20 121 views
1

我在客戶端和用戶之間有多對多的關係,並且正試圖運行一個查詢來返回所有活動用戶和他們的客戶端,其中客戶端也應該只是活動的。但是,它也會返回所有非活動客戶端。我的查詢看起來像這樣JPQL加入多對多關係

select u from User u inner join u.clientUsers cu join cu.client c where u.active = true and c.active = true 

我確定我的連接類型不正確。有人可以幫忙嗎?

回答

2

它將返回所有活動並擁有活動客戶端的用戶。它不返回客戶端,因此當您訪問user.clientUsers關係時,您將獲得所有關聯的客戶端。返回的實體意在反映實體在數據庫中的狀態,因此規範中不支持基於查詢構建不完整的實體。它會在跟蹤更改時導致問題,並且在需要真實數據時會造成混淆。嘗試將查詢基於活動用戶的活動客戶端,然後從客戶端訪問用戶(假設關係是雙向的): 「select c from Client c join c.clientUsers cu where c.active = true and cu。 user.active = true「 或者如果你想同時在一個查詢中: 」select c,u from Client c join c.clientUsers cu join cu.user u where c.active = true and u.active = true「

第二個查詢將返回對象[]的列表,每個對象數組包含一個客戶端及其關聯的活動用戶。如果需要,您可以對其進行處理以映射用戶和客戶端集合。