Mysql FindAlluseCountTop1BysActiveOrderById(布尔值isActive)不生成带“的查询”;限制1“;

Mysql FindAlluseCountTop1BysActiveOrderById(布尔值isActive)不生成带“的查询”;限制1“;,mysql,hibernate,jpa,spring-data-jpa,Mysql,Hibernate,Jpa,Spring Data Jpa,为什么JPA不对查询应用“限制1”? 我正在尝试在SpringBoot应用程序中编写一个存储库函数,以从顶部获取第一个结果,其中按ID排序时“isActive”为TRUE。此函数生成一个不包含“LIMIT 1”的查询。此函数返回多个结果,并因“query未返回唯一结果:4”异常而失败。我正在使用Hibernate Core v5.3.7.Final和MySQL v8.0.12作为数据库 生成的查询: select phoneinfo0_.id as id1_0_, phoneinfo0_.Pho

为什么JPA不对查询应用“限制1”? 我正在尝试在SpringBoot应用程序中编写一个存储库函数,以从顶部获取第一个结果,其中按ID排序时“isActive”为TRUE。此函数生成一个不包含“LIMIT 1”的查询。此函数返回多个结果,并因“query未返回唯一结果: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 |
+--------+------------+--------------+--------------+

另外,请告诉我是否需要“按ID排序”,或者如果ID是主键自动递增的,是否在每次选择时都默认执行此操作?

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

findTop1UseCountByIsActiveOrderById(Boolean isActive)

findFirstUseCountByIsActiveOrderById(Boolean isActive)

嗨@KonstantinLabun谢谢你这么快的回复。我已经尝试过了,当我从函数名中删除UseCount时,它就起作用了。JPA直接忽略我想要选择的列,而是选择整个表。我得到了我需要的,谢谢你。有一件事你们知道如何只选择一个特定的列,或者为什么JPA选择整个表而不是只获取“UseCount”?方法名是非常简单的事情。不确定它是否能让你解决你的问题。尝试使用JPQL:我刚刚读过。显然我们不能。当我们想要选择特定的列时,我们必须使用@Query。我的解决方案是“FindFirstBysActiveTrueOrderById()”,因为我一直只想要活动对象,现在就获取整个对象,因为它的其他值可以在以后使用。这也有帮助。