【发布时间】:2021-05-11 12:06:31
【问题描述】:
请帮我解决这个问题。我有一个非常简单的 crud 项目,在 springboot 中的 oracle DB(ID,name,age,email) 中有一个学生表,我想知道的是让一个学生在 jpa 存储库中使用一个调用存储过程的方法。运行项目时出现错误 PLS-00221 不是过程或未定义。
--stored procedure
CREATE OR REPLACE FUNCTION
findstudentbyid
RETURN STUDENT%ROWTYPE
IS
estudiante STUDENT%ROWTYPE;
BEGIN
SELECT *
INTO estudiante
FROM STUDENT
WHERE ID=1;
RETURN estudiante;
END findstudentbyid;
//Entity in sprongboot project
@Entity
@Table
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(
name = "findstudentbyid",
procedureName = "findstudentbyid"
)
})
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
//Private variables
private Long ID;
private String name;
private Number age;
private String email;
//Constructor
protected Student(){}
public Student(String name , Number age , String email){
this.name = name;
this.age = age;
this.email = email;
}
public Long getID() {
return ID;
}
public String getName() {
return name;
}
public Number getAge() {
return age;
}
public String getEmail() {
return email;
}
}
//JPA CRUD REPOSITORY
public interface StudentRepository extends CrudRepository<Student,Long>{
@Procedure(name = "findstudentbyid")
Iterable<Student> findstudentbyid();
}
【问题讨论】:
-
我不了解 Java,但是:我看到您将函数名称括在双引号中(无法判断,也许 Java 期望如此)。在 Oracle 中,对象名称默认为大写,除非以混合大小写创建并用双引号括起来。因为你没有这样做 - 没关系;不要在 Oracle 中使用混合大小写 - 另一种选择是尝试使用大写的函数调用。所以:代替
"findstudentbyid",试试"FINDSTUDENTBYID"。
标签: java oracle spring-boot spring-data-jpa