2017-05-27 3 views
0

Ich möchte alle Lautsprecher auswählen => Ich brauche alle Benutzer mit spekaerEvents ist nicht null.Frühling viele zu viele wählen

Ich verwende Spring Data und versuchte, Repository mit Methode zu verwenden, aber es funktioniert nicht.

Es gibt alle Lautsprecher, aber Lautsprecher dupliziert (so wird es 5 mal User1 sein, 5-mal User2 usw.)

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

Ich weiß, ich @query Annotation verwenden können, um benötigte Benutzer zu wählen, aber ich kann‘ t Finde es heraus (Frage selbst).

Ich habe so etwas, aber es funktioniert auf die gleiche Weise. Ich habe das Gefühl, dass ich DISTINCT irgendwo hinzufügen muss, aber ich weiß nicht wie.

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

1. Stellen Sie fest, dass Query eine JPQL- und keine SQL-Abfrage erwartet. 2. Erkenne, dass JPQL nicht dasselbe ist wie JPQL und verdient gelernt zu werden, genau wie du SQL einmal gelernt hast. 3. Öffnen Sie das Hibernate-Handbuch und suchen Sie nach dem JPQL-Kapitel in der Dokumentation (das Lesen des gesamten Handbuchs kann ebenfalls eine gute Idee sein). 4. Lesen Sie das Kapitel zweimal oder dreimal, falls erforderlich. 5. Sie sollten jetzt in der Lage sein, zumindest eine JPQL-Abfrage auszuprobieren und verschiedene Benutzer auszuwählen. Beachten Sie, dass kein Sprecher jemals eine Null-Sammlung von Ereignissen haben wird. Die Sammlung ist möglicherweise leer, aber nicht null. –

Antwort

0

Okay, ich habe es herausgefunden.

Mein Hauptproblem war ofcouse schlechtes Verständnis von jpql und sql zu.
Aber die Idee hat mir auch hier "geholfen". Es wurde keine Facette für JPA installiert, und es wollte einfach nicht die Funktion "speakerEvents.size" verwenden. Daher denke ich, dass es nicht unterstützt wird. Und weiter, es wurde versucht, Datenbank Benutzer, nicht meine Anwendung Benutzer => es gab mehr Fehler. Als ich im Debugging userName "postgres" gesehen habe, habe ich endlich verstanden, was dort passiert.