Spring Boot JPA调用自定义查询报错:找不到Flight的executeMyQuery属性
问题解决
错误原因分析
出现No property 'executeMyQuery' found for type 'Flight'错误,核心原因有两点:
- 查询语法不匹配:
@Query默认使用JPQL(Java持久化查询语言),你写的select * from flight是原生SQL语法,JPQL需要基于实体类而非数据库表名编写,且不支持*这类原生写法。 - 返回类型不兼容:方法声明为
void,但执行的是select查询,必须指定对应返回类型,否则Spring Data JPA无法解析方法的预期行为。
修复方案
根据需求提供两种可行修复方式:
方式一:使用JPQL查询
将语句改为JPQL格式,同时指定正确返回类型:
@Repository public interface FlightRepository extends JpaRepository<Flight, Integer> { @Query("select f from Flight f") List<Flight> executeMyQuery(); }
方式二:使用原生SQL查询
若坚持用原生SQL,需添加nativeQuery = true参数,并指定返回类型:
@Repository public interface FlightRepository extends JpaRepository<Flight, Integer> { @Query(value = "select * from flight", nativeQuery = true) List<Flight> executeMyQuery(); }
额外注意事项
- 若执行的是更新/删除操作,需添加
@Modifying注解,方法返回类型可设为void或int(返回影响行数),且必须配合事务使用。 - 确保实体类
Flight的@Table注解指定的表名与数据库中flight表一致(未指定时,默认用实体类名小写作为表名)。
内容的提问来源于stack exchange,提问作者ps938w
相关产品推荐
相关产品推荐

