Java Spring引导中的查询返回空值

Java Spring引导中的查询返回空值,java,spring-boot,hibernate,Java,Spring Boot,Hibernate,好的,我是Spring Boot的新手,我目前面临一个问题,即在Postman中尝试成功地对我的MySQL数据库运行以下查询,而不接收空值列表: @Query("SELECT user.id, user.email FROM ProjectUser user WHERE user.lastLogin IS NOT NULL AND user.userType = 'Test'") List<ProjectUser> test1(); @Query

好的,我是Spring Boot的新手,我目前面临一个问题,即在Postman中尝试成功地对我的MySQL数据库运行以下查询,而不接收空值列表:

    @Query("SELECT user.id, user.email FROM ProjectUser user WHERE user.lastLogin IS NOT NULL AND user.userType = 'Test'")
    List<ProjectUser> test1();
@Query(“选择user.id,user.email FROM ProjectUser user,其中user.lastLogin不为NULL,user.userType='Test'))
列出test1();
User.id和User.email在数据库中的类型是bigint(20)和VARCHAR(255),我怀疑这可能与它们没有被声明为NVARCHAR有关,但我没有尝试修改它,因为我担心它会损坏数据库:p。但是,我发现条件作用是因为返回的对象数是正确的,所以我怀疑这个问题主要与代表价值观有关

相比之下,以下NativeQuery在Postman中工作并返回非空值:

    @Query(value = "SELECT id, email FROM user WHERE last_login IS NOT NULL AND user_type = 'Test'", nativeQuery = true)
    List<ProjectUser> test1();
@Query(value=“选择id,来自上次登录不为NULL且用户类型为'Test',nativeQuery=true的用户的电子邮件)
列出test1();

我只是想知道这里是否有人知道如何解决这个问题?我不一定明白为什么我不应该在NativeQuery解决方案起作用时使用它,但这更多的是出于好奇和理解问题。

您应该严格区分hql/jpql查询和本机sql查询

当您在jpql select子句中使用显式列列表时,这意味着您应该期望结果为
list

因此,对于您的情况,您应该按照以下方式更正查询:

@Query(“从ProjectUser用户中选择用户,其中user.lastLogin不为NULL,user.userType='Test'))
列出test1();

有关可以在SELECT子句中使用的值的更多详细说明,请参见。

尝试使用以下查询
@query(“从项目中选择用户user user user,其中user.lastLogin不为NULL,user.userType='Test'”)
看起来很有效!疯子你能简要解释一下我犯的最大错误是什么吗?非常感谢你!