これが私がしたことです。
質問2: この質問に答えるには、ネイティブクエリを次のように変更する必要がありました
@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();
}
質問1: これに答えるには3つのことが関係しています。上記のようにネイティブクエリを変更したので、別のエラーが発生しました:
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)
sch1
というデータベースを探していました 。 H2でストアドプロシージャを呼び出すために使用されるパターンは、database.schema.procedure_name
のようです。 。その手順が実際に何をするかは気にしないので、sch1
というデータベースを作成することでこれを偽造することができました。 STUDENT_PACKAGE
というスキーマ およびプロシージャ名Set_Grades_To_A
インメモリデータベースを作成するには、次のプロパティspring.datasource.url
を設定する必要があります。 application.properties
内 ファイル。
-
sch1
を作成します データベースは次のとおりですspring.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
。データベース名がsch1
であることに注意してください -
STUDENT_PACKAGE
を作成します この\\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE
を追加してスキーマを作成しますspring.datasource.url
の最後まで 。これにより、STUDENT_PACKAGE
という2番目のスキーマが追加されます。 。プロパティは次のようになります。spring.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
-
Set_Grades_To_A
を作成します これをschema.sqlに追加することによるストアドプロシージャCREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;