当前位置: 首页 > 知识库问答 >
问题:

在调用jpa存储库中的存储过程时,位置参数[1]未与此过程调用注册

段阳夏
2023-03-14

我试图调用一个基本的oracle pl/sql存储过程,该过程从表student(姓名、年龄、电子邮件)返回一个字符串。我使用的是命名存储过程注释,但在执行逻辑时出错。谢谢你的帮助。

CREATE OR REPLACE PROCEDURE p_findemail (email OUT VARCHAR2)
IS 
BEGIN
    SELECT EMAIL INTO email FROM STUDENT WHERE ID=1;
END p_findemail;


@Entity
@Table(name="Student")

@NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(
        name="p_findemail",
        procedureName = "p_findemail",
        parameters = {
            @StoredProcedureParameter(name="email" , mode = ParameterMode.OUT , type=String.class)
        }
        
    )
})


public class Student {
@Repository
public interface StudentRepository extends CrudRepository<Student,Long>{     
    
    @Procedure(value = "p_findemail",                  
                name = "p_findemail",
                outputParameterName = "email")

    String findstudentbyid();      
    
}

这就是我犯的错误

错误2864---[nio-8080-exec-1]o.a.c.c.c.[/]。[dispatcherServlet]:Servlet。路径为[]的上下文中servlet[dispatcherServlet]的service()引发异常[Request processing failed;嵌套异常为org.springframework.dao.InvalidDataAccessApiUsageException:位置参数[1]未注册到此过程调用中;嵌套的例外是java。lang.IllegalArgumentException:位置参数[1]未在此过程调用]中注册,这是根本原因

java.lang.IllegalArgument异常:位置参数[1]没有与此过程调用注册在org.hibernate.query.procedure.internal.过程参数etadata.get查询参数(过程参数etadata.java:141)

共有1个答案

上官鸿朗
2023-03-14

问题似乎是Spring-Data-JPA

[https://github.com/spring-projects/spring-data-jpa/issues/2188][1]

对我有效的解决方案是:

将参数更改为INOUT

  @StoredProcedureParameter(name="email" , mode = ParameterMode.INOUT ,
  type=String.class)
 

    

从存储库调用存储过程时

 @Procedure(name = STORED_PROC_NAME)
  
 // email is passed as null
 String findstudentbyid(@Param("email") String email);
 
 and pass this email as null.

PS:根据存储的pro返回的内容,您可能必须使用Map或String作为返回类型。

 类似资料:
  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 我使用JDBC这样调用这个过程: 它向我抛出一个错误,通知调用格式错误。 但是如果我像这样直接在IDE中运行调用:

  • 从1.r.58开始, 支持出参, 之前的版本仅支持入参. 从实现方式上说, 是通过扩展自定义SQL的含义及上下文来实现 仅含义入参的存储过程 // 建表,删除老的存储过程. dao.create(Pet.class, true); dao.insert(Pet.create("wendal")); dao.execute(Sqls.create("DROP PRO

  • 问题内容: 我正在编写一个简单的Web应用程序以调用存储过程并检索一些数据。它是一个非常简单的应用程序,可以与客户的数据库进行交互。我们传递员工ID和公司ID,存储过程将返回员工详细信息。 Web应用程序无法更新/删除数据,并且正在使用SQL Server。 我正在Jboss AS中部署Web应用程序。我应该使用JPA访问存储过程还是。在这种情况下使用JPA的任何优势。 调用该存储过程的sql语句

  • 问题内容: 我希望能够在PetaPoco中使用命名参数调用存储的proc。 为了调用执行搜索/获取的存储过程: 我可以做这样的事情: 另外,如何调用执行插入操作的存储过程? 谢谢,Nac 问题答案: 更新: 我尝试了以下操作来进行获取和插入,并且效果很好: 可以进一步改进以传递SQL参数。