2016-04-23 9 views
0

私はアプリケーションを持っています。ここではJPAを使用してデータベースのデータにアクセスしています。今私はより複雑なクエリを実行する必要がありますが、私はそれを作る方法を把握することはできません。私のリポジトリのインターフェースでOneToMany休止状態の条件付きJPAクエリ

は、私は彼の名によって、ユーザーのすべてのchatThreadsを選択し、作業のクエリを、持っている:

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

しかし、どのように読まれなかった、メッセージのみを選択するために、今、それを調整しますまだですか? ありhibernate OneToMany relationshipが存在し、スキームは以下のようになります。あなたのコメントに基づいて enter image description here

+0

この追加条件で2番目のクエリを作成します。 –

+0

..何を意味するのか分かりませんか?それをもっと説明し答えとして投稿してもらえませんか? – Dworza

+0

未読のメッセージを持っている人に今フィルタリングされただけで、_messages_ nowまたはchatThreadsを選択することを意味しますか? –

答えて

1

、あなたはList<Message> messagesとしてChatThreadにOneToMany関係を持っていると仮定すると、あなたのJPQLクエリは次のようになります。

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

あなたはbooleanから整数への変換を使用しない場合は、message.readの条件を変更する必要があります。 message.read = 1

+0

これは可能です! – Dworza