首页 > 解决方案 > findAllUseCountTop1ByIsActiveOrderById(Boolean isActive) 不会生成带有“LIMIT 1”的查询

问题描述

为什么 JPA 不对查询应用“LIMIT 1”?我正在尝试在 SpringBoot 应用程序中编写一个存储库函数,以从顶部获取第一个结果,其中“isActive”在按 ID 排序时为 TRUE。此函数生成一个不包含“LIMIT 1”的查询,这会返回多个结果,并且由于“查询未返回唯一结果:4”异常而失败。我使用 Hibernate Core v5.3.7.Final 和 MySQL v8.0.12 作为数据库。

生成的查询:

select phoneinfo0_.id as id1_0_, phoneinfo0_.Phone as Phone2_0_, phoneinfo0_.isActive as isActive3_0_, phoneinfo0_.useCount as useCount4_0_ from contactNumbers phoneinfo0_ where phoneinfo0_.isActive=1 order by phoneinfo0_.id asc;

结果返回:

+--------+------------+--------------+--------------+
| id1_0_ | Phone2_0_  | isActive3_0_ | useCount4_0_ |
+--------+------------+--------------+--------------+
|      1 | 1111111111 |            1 |            0 |
|      2 | 9999999999 |            1 |            0 |
|      3 | 9000000000 |            1 |            0 |
|      4 | 2222222222 |            1 |            0 |
+--------+------------+--------------+--------------+

另外请告诉我“ORDER BY ID”是否是必要的,或者如果 ID 是主键自动递增,则默认情况下是否在每次选择时完成?

标签: mysqlhibernatejpaspring-data-jpa

解决方案


尝试将其重命名为以下之一:

findTop1UseCountByIsActiveOrderById(Boolean isActive)

findFirstUseCountByIsActiveOrderById(Boolean isActive)

推荐阅读