2017-05-27 55 views
0
public class User { 
    @ManyToMany(mappedBy = "speakers") 
    private List<Event> speakerEvents; 
} 

public class Event { 
    @ManyToMany 
    @JoinTable(name = "user_speaker_event", 
      joinColumns = {@JoinColumn(name = "event_id")}, 
      inverseJoinColumns = {@JoinColumn(name = "calendar_user_id")}) 
    private List<User> speakers; 
} 

我想選擇所有發言者=>我需要所有用戶spekaerEvents不爲空。春季多對多選擇

我使用Spring的數據,並試圖與法用戶庫,但它不工作。

它返回所有的音箱,但音箱複製(所以會出現5次用戶1,5次用戶2等)

public interface UserRepository extends JpaRepository<User, Long> {  
    List<User> getBySpeakerEventsIsNotNull(); 
} 

我知道我可以使用@Query註解來選擇需要的用戶,但我可以」剔除它(查詢本身)。

我有這樣的事情,但它的工作方式相同。我覺得我需要在某處添加DISTINCT,但不知道如何。

SELECT * 
FROM public.calendar_users 
INNER JOIN user_speaker_event ON calendar_users.id = user_speaker_event.calendar_user_id 
+0

1.注意,查詢需要一個JPQL,而不是一個SQL查詢。 2.認識到JPQL與JPQL不同,值得學習,就像你學過SQL一樣。 3.打開hibernate手冊,在文檔中查找JPQL章節(閱讀整本手冊也是一個好主意)。 4.如果需要,閱讀本章,兩次或三次。 5.您現在應該至少可以嘗試JPQL查詢,選擇不同的用戶。請注意,順便說一句,沒有發言者會收到事件的空集。該集合可能爲空,但不爲空。 –

回答

0

好吧,我想通了。

@Query("select u from User u where u.speakerEvents.size <> 0") 

我的主要問題是對jpql和sql的理解太差。
但是這個想法「也幫助了我」。 JPA沒有安裝方面,它只是不想使用speakerEvents.size,所以我不支持它。還有,它試圖把數據庫用戶,而不是我的應用程序用戶=>有更多的錯誤。當我在調試中看到userName「postgres」時,我終於明白髮生了什麼。