具有OneToMany hibernate关系条件的JPA查询

时间:2016-04-23 12:02:37

标签: java sql hibernate jpa

我有一个spring boot应用程序,我使用JPA来访问数据库中的数据。现在我需要执行更复杂的查询,但我无法弄清楚如何制作它。

在我的Repository界面中,我有一个工作查询,用他的用户名选择用户的所有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

1 个答案:

答案 0 :(得分:1)

根据您的评论并假设您将ChatThread上的OneToMany关系设为List<Message> messages,您的JPQL查询应如下所示:

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

如果您不使用布尔值进行整数转换,则可能必须更改message.read的条件,例如: message.read = 1