Java 带OneToMany hibernate关系条件的JPA查询
我有一个Java 带OneToMany hibernate关系条件的JPA查询,java,sql,hibernate,jpa,Java,Sql,Hibernate,Jpa,我有一个springboot应用程序,在这里我使用JPA访问数据库中的数据。现在我需要执行一个更复杂的查询,但我不知道如何进行 在我的存储库界面中,我有一个工作查询,它根据用户的用户名选择用户的所有聊天线程: @Query("SELECT chatThread FROM ChatThread chatThread WHERE (chatThread.userId) = (:id)") public List<ChatThread> find(@Param("id") Stri
springboot
应用程序,在这里我使用JPA
访问数据库中的数据。现在我需要执行一个更复杂的查询,但我不知道如何进行
在我的存储库界面中,我有一个工作查询,它根据用户的用户名选择用户的所有聊天线程:
@Query("SELECT chatThread FROM ChatThread chatThread WHERE (chatThread.userId) = (:id)")
public List<ChatThread> find(@Param("id") String id);
@Query(“从chatThread中选择chatThread chatThread,其中(chatThread.userId)=(:id)”)
公共列表查找(@Param(“id”)字符串id);
但现在如何调整它,只选择尚未阅读的消息?
存在一个hibernate-OneToMany关系
,该方案如下所示:
根据您的评论,并假设您在
聊天线程
上有OneToMany关系,如列出消息
,您的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
基于您的评论,并假设您在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)
如果不使用布尔到整数转换,您可能必须更改message.read的条件,例如
message.read=1
使用此附加条件编写第二个查询…我不明白您的意思?你不介意再解释一下,然后作为答案发布吗?你是想现在选择消息还是仍然选择聊天线程,只对那些有未读消息的进行过滤?@HeinBlöd我想选择所有聊天线程,其用户ID与通过参数传递的用户ID相同,另外,我希望那些聊天线程只包含未读消息~~~>Message.read==false使用此附加条件编写第二个查询…我不明白你的意思?你不介意再解释一下,然后作为答案发布吗?你是想现在选择消息还是仍然选择聊天线程,只对那些有未读消息的进行过滤?@HeinBlöd我想选择所有聊天线程,其用户ID与通过参数传递的用户ID相同,另外,我希望那些聊天线程只包含未读的消息~~~>Message.read==false这就可以了!这就行了!