无法使用 JPA 查询检索结果

Posted

技术标签:

【中文标题】无法使用 JPA 查询检索结果【英文标题】:Unable to retrieve results using JPA query 【发布时间】:2021-04-19 17:57:59 【问题描述】:

我正在尝试构建一个从 mysql 数据库中获取数据的 Spring Boot REST API。 这是我在 Spring Boot REST API 应用程序的存储库代码中定义的 JPA 查询方法:

public interface WeekRepository extends CrudRepository<Week, UUID> 
           Iterable<Week> findByOriginId(UUID originId);

这是我要查询的表的详细信息:

CREATE TABLE `week` 
  ( 
     `id`        DOUBLE NOT NULL auto_increment, 
     `due_date`  TIMESTAMP NOT NULL, 
     `origin_id` BINARY(36) DEFAULT NULL, 
     `status`    VARCHAR(36) DEFAULT NULL, 
     PRIMARY KEY (`id`) 
  )  

我在我的 Spring Boot 应用程序中打开了日志记录,结果我可以看到 Hibernate 生成的查询如下所示:

SELECT week0_.id        AS id1_3_, 
       week0_.due_date  AS due_date2_3_, 
       week0_.origin_id AS origin_i3_3_, 
       week0_.status    AS status4_3_ 
FROM   week week0_ 
WHERE  week0_.origin_id = ?; 

从日志中我可以看到我正在通过控制器将 JSON 中的参数 origin_id 成功地传递给存储库代码。控制台中的日志打印显示该参数被绑定到 ?参数如下图:

2021-01-15 00:44:05.916 TRACE 44612 --- [nio-8082-exec-2] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [49ee49da-8e6e-45f0-a0ea-e63205077870]

但是,此查询没有返回任何结果。

有人可以帮助我吗?如果您需要我方面的更多信息,请告诉我。谢谢。

【问题讨论】:

你能检查这个链接***.com/questions/6629127/…吗? 【参考方案1】:

试试这个:

@Query(value="select * from week where origin_id = :originId", nativeQuery=true)
Iterable<Week> findByOriginId(UUID originId);

【讨论】:

【参考方案2】:

你也可以在你的 weekRepository 接口中使用@Query 注解来得到想要的结果,像这样:

@Query(value="select * from week0 where week0_.origin_id = ?1",nativeQuery=true )
Iterable<Week> findByOriginId(UUID originId);

这里我假设 week0 是数据库表名,所以检查它并进行相应的更改,让我知道这是否有效。

【讨论】:

我已尝试添加本机查询,但没有返回任何结果。我注意到日志中有一些内容:o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BINARY] - [49ee49da-8e6e-45f0-a0ea-e63205077870] UUID 被绑定为二进制数据。我可以知道 JPA 如何决定数据类型吗?【参考方案3】:

请在 originId 属性中添加以下注释以使休眠以添加必要的转换。 mysql 的 UUID 道具似乎存在一些问题

@Column(name = "origin_id")
@Type(type="uuid-char")
private UUID originId;

【讨论】:

以上是关于无法使用 JPA 查询检索结果的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Spring Data JPA 执行聚合函数并获取结果

从 Spring Data Jpa 运行查询时无法获得结果

无法检索记录使用jpa库外键时为空

本机查询支持 SQL Server 的 Spring 数据 jpa 流

JPA/Hibernate 本机查询无法识别参数

由于意外的 AST 节点,使用 JPA TREAT 的命名查询无法正常工作