Här är vad jag gjorde.
Fråga #2: För att svara på denna fråga var jag tvungen att ändra den inbyggda frågan enligt följande
@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();
}
Fråga #1: Tre saker är inblandade för att svara på detta. Nu när jag hade ändrat den inbyggda frågan enligt ovan fick jag ett annat fel:
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)
Den letade efter en databas som heter sch1
. Det verkar som att mönstret som används för att anropa en lagrad procedur i H2 är database.schema.procedure_name
. Eftersom jag inte bryr mig om vad den proceduren faktiskt gör kunde jag fejka detta genom att skapa en databas som heter sch1
ett schema som heter STUDENT_PACKAGE
och procedurens namn Set_Grades_To_A
För att skapa i minnesdatabasen måste du ställa in följande egenskap spring.datasource.url
i application.properties
fil.
-
Skapa
sch1
databas enligt följandespring.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
. Observera att databasens namn ärsch1
-
Skapa
STUDENT_PACKAGE
schema genom att lägga till denna\\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE
till slutet avspring.datasource.url
. Detta lägger till ett andra schema som heterSTUDENT_PACKAGE
. Egenskapen ska se ut så härspring.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
-
Skapa en
Set_Grades_To_A
lagrad procedur genom att lägga till detta i ditt schema.sqlCREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;