Aqui está o que eu fiz.
Pergunta nº 2: Para responder a essa pergunta eu tive que alterar a consulta nativa da seguinte forma
@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();
}
Pergunta nº 1: Três coisas estão envolvidas para responder a isso. Agora que alterei a consulta nativa como acima, recebi um erro diferente:
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)
Ele estava procurando por um banco de dados chamado
sch1
. Parece que o padrão usado para chamar um procedimento armazenado em H2 é database.schema.procedure_name
. Como não me importo com o que esse procedimento realmente faz, consegui fingir isso criando um banco de dados chamado sch1
um esquema chamado STUDENT_PACKAGE
e o nome do procedimento Set_Grades_To_A
Para criar o banco de dados na memória, você deve definir a seguinte propriedade
spring.datasource.url
em application.properties
Arquivo. -
Crie osch1
banco de dados da seguinte formaspring.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
. Observe que o nome do banco de dados ésch1
-
Crie oSTUDENT_PACKAGE
esquema adicionando este\\;CREATE SCHEMA IF NOT EXISTS STUDENT_PACKAGE
até o final dospring.datasource.url
. Isso adiciona um segundo esquema chamadoSTUDENT_PACKAGE
. A propriedade deve ficar assimspring.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
-
Crie umSet_Grades_To_A
procedimento armazenado adicionando isso ao seu schema.sqlCREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;