2016-04-23 18 views
0

Ich habe eine Anwendung, wo ich JPA verwenden, um auf die Daten in einer Datenbank zuzugreifen. Jetzt müsste ich eine komplexere Abfrage durchführen, aber ich kann nicht herausfinden, wie ich es machen soll.JPA-Abfrage mit Bedingung für OneToMany Hibernate-Beziehung

In meiner Repository-Schnittstelle, ich habe eine Arbeits Abfrage, die alle Chatthreads eines Benutzer auswählt, durch seine Benutzername:

@Query("SELECT chatThread FROM ChatThread chatThread WHERE (chatThread.userId) = (:id)") 
    public List<ChatThread> find(@Param("id") String id); 

Aber wie es jetzt einstellen, werden nur Nachrichten wählen, die nicht gelesen wurden noch? Es existiert ein hibernate OneToMany relationship und das Schema sieht wie folgt aus:

SELECT chatThread FROM ChatThread chatThread WHERE (chatThread.userId) = (:id) AND NOT EXISTS (SELECT message FROM chatThread.messages message WHERE message.read = TRUE) 

Sie: enter image description here

+0

schreiben Sie eine zweite Abfrage mit dieser zusätzlichen Bedingung. –

+0

..ich verstehe nicht, was meinst du? Würde es dir nichts ausmachen, es mehr zu erklären und als Antwort zu posten? – Dworza

+0

Willst du _messages_ jetzt oder immer noch chatThreads auswählen, nur gefiltert jetzt auf diejenigen, die ungelesene Nachrichten haben? –

Antwort

1

Basierend auf Ihren Kommentar und vorausgesetzt, Sie die OneToMany Beziehung auf ChatThread als List<Message> messages haben, Ihre JPQL Abfrage sollte wie folgt aussehen Möglicherweise müssen Sie die Bedingung für message.read ändern, wenn Sie keine boolesche Konvertierung zu einer Ganzzahl verwenden, z message.read = 1.

+0

Dies könnte den Job erledigen! – Dworza