Đây là những gì tôi đã làm.
Câu hỏi số 2: Để trả lời câu hỏi này, tôi đã phải thay đổi truy vấn gốc như sau
@Repository
public interface StudentRepository extends JpaRepository<Student, String> {
@Modifying
@Query(value = "call sch1.STUDENT_PACKAGE.Set_Grades_To_A('A')", nativeQuery = true)
public void setStudentGradeToA();
}
Câu hỏi số 1: Ba điều liên quan để trả lời điều này. Bây giờ tôi đã thay đổi truy vấn gốc như trên, tôi gặp một lỗi khác:
Caused by: org.h2.jdbc.JdbcSQLException: Database "sch1" not found; SQL statement:
call sch1.STUDENT_PACKAGE.Set_Grades_To_A('A') [90013-197]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
Nó đang tìm kiếm một cơ sở dữ liệu có tên là sch1
. Có vẻ như mẫu được sử dụng để gọi một thủ tục được lưu trữ trong H2 là database.schema.procedure_name
. Vì tôi không quan tâm quy trình đó thực sự là gì nên tôi có thể giả mạo điều này bằng cách tạo cơ sở dữ liệu có tên sch1
một lược đồ được gọi là STUDENT_PACKAGE
và tên thủ tục Set_Grades_To_A
Để tạo cơ sở dữ liệu trong bộ nhớ, bạn phải đặt thuộc tính sau spring.datasource.url
trong application.properties
tệp.
-
Tạo
sch1
cơ sở dữ liệu như sauspring.datasource.url=jdbc:h2:mem:sch1;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=Oracle;INIT=CREATE SCHEMA IF NOT EXISTS first_schema
. Lưu ý rằng tên cơ sở dữ liệu làsch1
-
Tạo
STUDENT_PACKAGE
giản đồ bằng cách thêm\\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE
này vào cuốispring.datasource.url
. Điều này thêm một lược đồ thứ hai có tên làSTUDENT_PACKAGE
. Thuộc tính sẽ giống như sauspring.datasource.url=jdbc:h2:mem:sch1;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=Oracle;INIT=CREATE SCHEMA IF NOT EXISTS first_schema\\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE
-
Tạo
Set_Grades_To_A
thủ tục được lưu trữ bằng cách thêm nó vào schema.sqlCREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;