2016-04-23 69 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

用这个附加条件编写第二个查询。 –

+0

..我不明白你是什么意思?你不介意更多地解释它并作为答案张贴吗? – Dworza

+0

你的意思是选择_messages_现在还是chatThreads,现在只过滤给那些有未读消息的人? –

回答

1

基于您的评论,并假设你为List<Message> messagesChatThread的一对多的关系,你的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

+0

这可以完成这项工作! – Dworza