我有一个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
并且该方案看起来像:
答案 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
。