Inilah yang saya lakukan.
Pertanyaan #2: Untuk menjawab pertanyaan ini saya harus mengubah kueri asli sebagai berikut
@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();
}
Pertanyaan #1: Ada tiga hal yang terlibat untuk menjawabnya. Sekarang saya telah mengubah kueri asli seperti di atas, saya mendapatkan kesalahan yang berbeda:
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)
Itu sedang mencari database bernama sch1
. Sepertinya pola yang digunakan untuk memanggil prosedur tersimpan di H2 adalah database.schema.procedure_name
. Karena saya tidak peduli apa sebenarnya prosedur itu, saya dapat memalsukan ini dengan membuat database bernama sch1
skema yang disebut STUDENT_PACKAGE
dan nama prosedur Set_Grades_To_A
Untuk membuat database di memori, Anda harus mengatur properti berikut spring.datasource.url
di application.properties
berkas.
-
Buat
sch1
database sebagai berikutspring.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
. Perhatikan nama databasenya adalahsch1
-
Buat
STUDENT_PACKAGE
skema dengan menambahkan\\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE
ke akhirspring.datasource.url
. Ini menambahkan skema kedua yang disebutSTUDENT_PACKAGE
. Properti akan terlihat seperti inispring.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
-
Buat
Set_Grades_To_A
prosedur tersimpan dengan menambahkan ini ke schema.sqlCREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;