2010-05-25 147 views
5

只是一個簡單的問題:JPQL檢查許多一對多關係

還有誰與多對多的關係同一個實體(例如這種關係描述「友誼」,它連接實體(例如用戶)是對稱的)。

在執行時間方面,檢查用戶A是否是用戶B的「朋友」的最快方式是什麼? 「愚蠢」的方式是獲取整個List,然後檢查用戶是否存在,但這顯然是開銷。

我使用JPA 2

這裏的示例代碼:

@Entity 
@Table(name="users") 
public class UserEntity { 
    @ManyToMany(fetch = FetchType.LAZY) 
    private List<UserEntity> friends; 

    .... 
} 

回答

6

如果您不想要檢索整個列表,有關使用MEMBER OF什麼?類似這樣的:

SELECT user FROM UserEntity user WHERE :friend MEMBER OF user.friends 

這會給你所有的人以B爲朋友。如果只想將結果限制爲A,則在WHERE子句中添加一個條件。

不知道這是實現你想要的最好的方式。實際上,「愚蠢」的方式看起來並不那麼愚蠢。

+0

謝謝!這正是我需要的。你是否也可以建議如何修改查詢如果:朋友是身份證,而不是實體參考? 我對這個簡單的問題表示歉意,但是我在JPQL中有點失落:-) – Juriy 2010-05-25 12:43:07

+0

沒關係:-)已經找到了。 – Juriy 2010-05-25 12:52:29

+0

@Juriy你能分享一下你找到的解決方案嗎? – stivlo 2012-09-19 17:10:12