Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带OneToMany hibernate关系条件的JPA查询_Java_Sql_Hibernate_Jpa - Fatal编程技术网

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这就可以了!这就行了!