यहाँ मैंने क्या किया।
प्रश्न #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: इसका उत्तर देने में तीन बातें शामिल हैं। अब जब मैंने मूल क्वेरी को ऊपर के रूप में बदल दिया था तो मुझे एक अलग त्रुटि मिली:
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
. कहा जाता है . प्रॉपर्टी कुछ इस तरह दिखनी चाहिए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.sqlCREATE ALIAS STUDENT_PACKAGE.Set_Grades_To_A AS $$ void setGradesToA(String s) { new StringBuilder(s).reverse().toString(); } $$;