2017-05-27 6 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がnullではありません。多く選択する春

私はSpring Dataを使用しており、メソッドを使用してリポジトリをユーザーにしようとしましたが、機能しません。

「私は私が必要なユーザーを選択し@queryアノテーションを使用することができます知っているが、私ができる(その5倍のUser1、5回のUser2などがあるでしょう)

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

をそれはすべてのスピーカーを返しますが、スピーカーが重複それを把握する(クエリ自体)。

私はこれに似ていますが、同じように動作しています。私はどこかでDISTINCTを追加する必要があるように感じるが、方法はわからない。

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

1.クエリーにはSQLクエリーではなくJPQLが必要であることを認識します。 2. JPQLはJPQLと同じものではなく、かつてSQLを学んだことのように、学ばれる価値があることを理解してください。 3.休止状態のマニュアルを開き、マニュアルのJPQLの章を探します(マニュアル全体を読むことも良い考えです)。 4.必要に応じて、2回または3回、この章を読んでください。 5.これで、少なくとも別のユーザーを選択してJPQLクエリを試すことができるはずです。注意してください、話者はイベントのヌルコレクションを持っていることはありません。コレクションは空であるかもしれませんが、nullではありません。 –

答えて

0

わかりました。

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

私の主な問題は、あまりにもjpqlとSQLの悪い理解のでした。
しかし、アイデアは私もここで少し助けてくれました。 JPAにはファセットがインストールされておらず、speakerEvents.sizeを使用したくないのでサポートされていません。さらに、それはデータベースユーザを奪取しようとしていましたが、私のアプリケーションユーザではなく、もっとエラーがありました。デバッグでuserName "postgres"を見たとき、私は最終的にそこで何が起こっているのかを理解しました。

関連する問題