Oto, co zrobiłem.
Pytanie nr 2: Aby odpowiedzieć na to pytanie, musiałem zmienić natywne zapytanie w następujący sposób
@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();
}
Pytanie nr 1: Aby odpowiedzieć na to pytanie, potrzebne są trzy rzeczy. Teraz, gdy zmieniłem zapytanie natywne, jak powyżej, pojawił się inny błąd:
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)
Szukał bazy danych o nazwie sch1
. Wygląda na to, że wzorzec używany do wywoływania procedury składowanej w H2 to database.schema.procedure_name
. Ponieważ nie obchodzi mnie, co właściwie robi ta procedura, mogłem to sfałszować, tworząc bazę danych o nazwie sch1
schemat o nazwie STUDENT_PACKAGE
i nazwę procedury Set_Grades_To_A
Aby utworzyć bazę danych w pamięci, musisz ustawić następującą właściwość spring.datasource.url
w application.properties
plik.
-
Utwórz
sch1
bazę danych w następujący sposóbspring.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
. Zauważ, że nazwa bazy danych tosch1
-
Utwórz
STUDENT_PACKAGE
schemat, dodając ten\\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE
na końcuspring.datasource.url
. To dodaje drugi schemat o nazwieSTUDENT_PACKAGE
. Właściwość powinna wyglądać takspring.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
-
Utwórz
Set_Grades_To_A
procedura składowana, dodając ją do schema.sqlCREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;