You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2升级后NamedNativeQuery触发PropertyReferenceException求助

解决Spring Boot 2.1升级后Spring Data JPA的PropertyReferenceException问题

咱们直接来拆解你遇到的问题和对应的解决方案:

问题根源

Spring Boot从1.5.x升级到2.1.x后,Spring Data JPA的方法解析逻辑变得更严格了。在1.5.x版本中,只要存在匹配名称的命名查询,框架会优先使用它而跳过方法名的属性解析;但2.1.x版本里,如果Repository方法没有显式标注@Query注解,框架会默认尝试通过方法名语义去匹配实体类的属性。

你的Repository方法名为getPayments,框架会自动试图在DailyPaymentOrgFunc实体中寻找对应的payments属性(或者getPayments() getter方法),但你的实体类里根本没有这个属性,所以直接抛出了PropertyReferenceException。

解决方案

只需要给Repository的方法添加@Query注解,明确指定要使用的命名查询名称,就能让框架跳过方法名的属性解析,直接调用你定义的存储过程查询:

修改后的Repository代码:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;

public interface DailyPaymentOrgRepository extends JpaRepository<DailyPaymentOrgFunc,String> {
    @Query(name = Function.ORG_FUNC_NAME) // 新增这一行,绑定命名查询
    List<DailyPaymentOrgFunc> getPayments(@Param("orgCode") Integer orgCode);
}

额外验证点

  • 确认你的命名查询名称DailyPaymentOrgFunc.getPayments格式正确:命名查询的标准格式就是实体类名.方法名,和你Repository的方法名完全匹配,加上注解后能正确关联。
  • 检查存储过程的参数绑定:你的命名查询里用了:orgCode参数,Repository方法也对应标注了@Param("orgCode"),这部分逻辑是没问题的。

这样修改后,Spring Data JPA就会直接执行你定义的命名原生查询,不会再去解析不存在的实体属性,问题就能解决了。

内容的提问来源于stack exchange,提问作者Ferid Qelenderli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:37:55