我正在尝试构建一个从MySQL数据库获取数据的Spring Boot REST API。这是我在Spring Boot REST API应用程序的Repository代码中定义的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]
但是这个查询没有返回任何结果。
有人能帮帮我吗?如果你需要我提供更多的信息,请告诉我。谢谢你。
请在originId属性中添加以下注释,以便hibernate添加必要的转换。似乎有一些问题与UUID道具mysql
@Column(name = "origin_id")
@Type(type="uuid-char")
private UUID originId;
您还可以在weekRepository接口中使用@Query注释来获得所需的结果,如下所示:
@Query(value="select * from week0 where week0_.origin_id = ?1",nativeQuery=true )
Iterable<Week> findByOriginId(UUID originId);
这里我假设week0是数据库表名,所以检查它并进行相应的更改,并告诉我这是否有效。
试试这个:
@Query(value="select * from week where origin_id = :originId", nativeQuery=true)
Iterable<Week> findByOriginId(UUID originId);