Hibernate调用Oracle函数报No query defined for that name错误如何解决
核心报错原因
JPA规范要求@NamedNativeQuery、@SqlResultSetMapping这类查询配置注解只能标注在被@Entity修饰的实体类上,你将两个注解标注在普通的Repository类TestDao上,JPA启动扫描时不会识别这部分配置,自然找不到名为getTestFunction的命名查询,因此抛出该报错。
修复步骤
1. 调整注解位置
将你定义的@SqlResultSetMapping和@NamedNativeQuery注解移动到项目中任意一个被@Entity修饰的实体类上即可,JPA会自动扫描所有实体类上的命名查询配置。
2. 补全POJO的全参构造方法
你使用了@ConstructorResult做结果映射,要求POJO必须存在和映射列顺序、类型匹配的构造方法,修改ResultPOJO如下:
public class ResultPOJO { private String ID; private String VALUE; // 新增和@ConstructorResult匹配的全参构造方法 public ResultPOJO(String ID, String VALUE) { this.ID = ID; this.VALUE = VALUE; } // 原有getter、setter、无参构造方法保留即可 }
3. 修正参数索引
你定义的调用语句{? = call mySchema.MyPackage.getTestFunction(?,?)}中,第一个占位符?是函数返回值,对应索引0的位置不需要手动传参,你传入的两个入参对应的索引是1和2,修改TestDao的查询逻辑:
public List<ResultPOJO> getValues(String pParam1, LocalDate pParam2) { TypedQuery<ResultPOJO> q = entityManager.createNamedQuery("getTestFunction",ResultPOJO.class); // 修正参数索引从1开始 q.setParameter(1, pParam1); // LocalDate转DATE类型适配Oracle字段 q.setParameter(2, java.sql.Date.valueOf(pParam2)); return q.getResultList(); }
可选替代方案(无需定义命名查询)
如果不想修改实体类的注解配置,可以直接通过StoredProcedureQuery直接调用函数,不需要提前配置命名查询:
@Transactional @Repository @SqlResultSetMapping( name = "testmapping", classes = { @ConstructorResult( targetClass = ResultPOJO.class, columns = { @ColumnResult(name = "ID"), @ColumnResult(name = "VALUE") } ) } ) public class TestDao { public List<ResultPOJO> getValues(String pParam1, LocalDate pParam2) { // 直接声明存储函数调用,绑定结果映射 StoredProcedureQuery query = entityManager.createStoredProcedureQuery( "mySchema.MyPackage.getTestFunction", "testmapping" ); // 注册返回值参数(索引1为游标返回值) query.registerStoredProcedureParameter(1, void.class, ParameterMode.REF_CURSOR); // 注册两个入参 query.registerStoredProcedureParameter(2, String.class, ParameterMode.IN); query.registerStoredProcedureParameter(3, Date.class, ParameterMode.IN); // 赋值入参 query.setParameter(2, pParam1); query.setParameter(3, java.sql.Date.valueOf(pParam2)); return query.getResultList(); } }
内容的提问来源于stack exchange,提问作者Thanthla
相关产品推荐
相关产品推荐

