【问题标题】:Parameter emp_name was not defined for stored procedure get_empoyee_details未为存储过程 get_empoyee_details 定义参数 emp_name
【发布时间】:2021-07-09 08:06:32
【问题描述】:

我有点困惑,正在尝试使用 Spring Boot JPA 调用存储过程。已创建一个简单的过程并使用 JPA 的 @NamedStoredProcedureQuery 注释调用该过程。

由于某些奇怪的原因,我遇到了错误

没有为存储过程定义参数 emp_name 获取_empoyee_details。 在 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError

我做错了什么,试图通过stackoverflow上的其他答案没有帮助

这是我的实体类

import lombok.Data;
import lombok.ToString;

@Entity
@Data
@ToString
@NamedStoredProcedureQuery(name = "get_empoyee_details", procedureName = "get_empoyee_details", resultClasses = {
        Employee.class }, parameters = {
        @StoredProcedureParameter(name = "emp_name", mode = ParameterMode.IN, type = String.class) })
public class Employee {

    @Id
    @GeneratedValue
    private Long id;

    @Column(name = "designation")
    private String designation;

    @Column(name = "employee_name")
    private String employeeName;

    @Column(name = "employee_code")
    private String employeeCode;
}

我的控制器

@RestController
public class EmployeeController {

    @PersistenceContext
    private EntityManager entityManager;

    @SuppressWarnings("unchecked")
    @GetMapping("/employees")
    public ResponseEntity<List<Employee>> getEmp(@RequestParam(name = "name") String name) {
        List<Employee> employees = entityManager.createNamedStoredProcedureQuery("get_empoyee_details")
                .setParameter("emp_name", name).getResultList();
        return new ResponseEntity<>(employees, HttpStatus.OK);
    }
}

提前谢谢你

堆栈跟踪

Error preparing registered callable parameter] with root cause

com.microsoft.sqlserver.jdbc.SQLServerException: Parameter emp_name was not defined for stored procedure get_empoyee_details.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:234) ~[mssql-jdbc-8.2.2.jre8.jar:na]

我的 sql server 存储过程

CREATE PROCEDURE get_empoyee_details @name nvarchar(30)
AS
SELECT * 
FROM employee
WHERE employee_name = @name
GO

【问题讨论】:

  • 你能发布整个堆栈跟踪吗?
  • 嗨@SimonMartinelli 添加了堆栈跟踪

标签: java spring-boot java-stored-procedures


【解决方案1】:

如 excpetion 所说,参数名称错误。

com.microsoft.sqlserver.jdbc.SQLServerException: 
    Parameter emp_name was not defined forstored procedure get_empoyee_details.

改名:

@NamedStoredProcedureQuery(name = "get_empoyee_details", 
                          procedureName = "get_empoyee_details", 
                          resultClasses = { Employee.class }, 
                          parameters = {
                              @StoredProcedureParameter(name = "name", // this was wrong
                                                        mode = ParameterMode.IN, type = String.class) })
public class Employee {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多