PSQLE अपवाद निश्चित करणे: अनिश्चित डेटा प्रकारासह JPA नेटिव्ह क्वेरी त्रुटी

PSQLE अपवाद निश्चित करणे: अनिश्चित डेटा प्रकारासह JPA नेटिव्ह क्वेरी त्रुटी
PSQLE अपवाद निश्चित करणे: अनिश्चित डेटा प्रकारासह JPA नेटिव्ह क्वेरी त्रुटी

JPA क्वेरींमधील डायनॅमिक SQL पॅरामीटर प्रकारांचे समस्यानिवारण

Java डेव्हलपर म्हणून, आम्ही आमचा डेटाबेस संवाद सुव्यवस्थित करण्यासाठी JPA वर अवलंबून असतो, विशेषत: डायनॅमिक SQL क्वेरी सह. तथापि, डायनॅमिक क्वेरी कधीकधी अनपेक्षित एरर ट्रिगर करू शकतात ज्या अगदी अनुभवी विकासकांनाही आव्हान देतात. अशी एक समस्या उद्भवते जेव्हा आम्ही SQL क्वेरींमध्ये सशर्त मूल्यांसह कार्य करतो, ज्यामुळे त्रुटी संदेश येतो: "PSQLEअपवाद: त्रुटी: $2 पॅरामीटरचा डेटा प्रकार निर्धारित करू शकलो नाही". 😖

या समस्येचा सामना करणे निराशाजनक असू शकते, विशेषत: जेव्हा आम्ही सशर्त पॅरामीटर्स, जसे की शून्य तपासणी सादर करत नाही तोपर्यंत आमचा कोड ठीक काम करतो. यासारख्या परिस्थितींमध्ये, PostgreSQL अनेकदा पॅरामीटर्ससाठी योग्य डेटा प्रकार ओळखण्यात अपयशी ठरते, ज्यामुळे क्वेरी अयशस्वी होते. हे विकासात अडथळा ठरू शकते, कारण ते आमच्या JPA भांडार मध्ये डेटा योग्यरित्या समाविष्ट किंवा अद्यतनित होण्यापासून प्रतिबंधित करते.

या लेखात, ही त्रुटी का उद्भवते आणि ती प्रभावीपणे कशी सोडवायची ते आम्ही खाली टाकू. जेपीए पॅरामीटर्सवर प्रक्रिया कशी करते आणि पोस्टग्रेएसक्यूएल SQL केस स्टेटमेंटचे शून्य मूल्यांसह कसे अर्थ लावते यावर आम्ही चर्चा करू, जे गोंधळाचे एक सामान्य स्रोत असू शकते. याव्यतिरिक्त, आम्ही JPA क्वेरींमध्ये रद्द करण्यायोग्य पॅरामीटर्सची अखंड हाताळणी सुनिश्चित करण्यासाठी काही सर्वोत्तम पद्धती समाविष्ट करू. 🌐

शेवटी, तुमचा डेटाबेस परस्परसंवाद गुळगुळीत आणि कार्यक्षम ठेवून ही त्रुटी टाळण्यासाठी तुमची क्वेरी आणि पॅरामीटर्स कसे संरचित करावे हे तुम्हाला कळेल. चला तपशीलांमध्ये डुबकी मारूया आणि या समस्येचा सामना करूया.

आज्ञा वापर आणि वर्णनाचे उदाहरण
@Modifying हे भाष्य JPA मधील रेपॉजिटरी पद्धतींवर वापरले जाते हे सूचित करण्यासाठी की क्वेरी डेटामध्ये बदल करेल, जसे की समाविष्ट करणे, अपडेट करणे किंवा हटवणे क्रिया. येथे, ते केवळ-वाचनीय ऑपरेशन करण्याऐवजी डेटाबेसमध्ये नवीन रेकॉर्ड समाविष्ट करण्यासाठी "तयार करा" पद्धत सक्षम करते.
@Query JPA रेपॉजिटरी पद्धतीमध्ये सानुकूल SQL क्वेरी परिभाषित करते. नेटिव्हक्वेरी = खरे पॅरामीटर असे सूचित करते की SQL डेटाबेसच्या मूळ SQL बोलीमध्ये (या प्रकरणात पोस्टग्रेएसक्यूएल), JPQL ऐवजी लिहिलेले आहे, जी JPA साठी मानक क्वेरी भाषा आहे.
COALESCE PostgreSQL फंक्शन जे वितर्कांच्या सूचीमधून पहिले नॉन-नल मूल्य मिळवते. याचा वापर येथे SQL CASE स्टेटमेंटमधील नल चेक हाताळण्यासाठी :arh पॅरामीटरसाठी नॉन-नल व्हॅल्यू सुनिश्चित करून केला जातो, ज्यामुळे अस्पष्ट प्रकारच्या त्रुटी टाळण्यास मदत होते.
jdbcTemplate.update स्प्रिंगच्या JdbcTemplate वर्गातील एक पद्धत SQL अपडेट ऑपरेशन्स, इन्सर्टसह कार्यान्वित करण्यासाठी वापरली जाते. जेपीए पुरेसे नसतील अशा जटिल प्रकरणांसाठी हे SQL आणि त्याचे पॅरामीटर्स थेट निर्दिष्ट करून अधिक लवचिक पॅरामीटर हाताळण्यास अनुमती देते.
Optional.ofNullable Java च्या पर्यायी वर्गातील एक उपयुक्तता पद्धत जी एक पर्यायी ऑब्जेक्ट रिटर्न करते ज्यामध्ये मूल्य नसलेले असल्यास किंवा रिक्त पर्यायी असल्यास. नेस्टेड फील्ड्समध्ये प्रवेश करताना संभाव्य NullPointerExceptions प्रतिबंधित करून, nullable फील्ड्स सुंदरपणे हाताळण्यासाठी याचा वापर केला जातो.
Types.OTHER java.sql.Types वर्गातील स्थिरांक, SQL च्या अन्य प्रकाराचे प्रतिनिधित्व करतो. डेटा प्रकार हाताळण्यासाठी JDBC क्वेरीसाठी पॅरामीटर प्रकार निर्दिष्ट करताना वापरले जाते, जसे की UUID, जे SQL च्या मानक प्रकारांवर थेट मॅप करू शकत नाही.
@Param एक भाष्य जे JPA क्वेरीमध्ये पद्धत पॅरामीटरला नामित पॅरामीटरशी जोडते. येथे, मूळ SQL क्वेरीमध्ये id आणि arh सारख्या पद्धतीचे पॅरामीटर्स मॅप करण्यासाठी वापरले जाते.
assertNotNull दिलेली ऑब्जेक्ट शून्य नाही याची पडताळणी करण्यासाठी वापरली जाणारी JUnit प्रतिपादन पद्धत, चाचणी दरम्यान विशिष्ट फील्ड किंवा ऑब्जेक्ट योग्यरित्या तयार किंवा सुधारित केले गेले आहेत हे सत्यापित करते. हे चाचणी पद्धतींमध्ये आवश्यक आहे जे डेटा हाताळतात किंवा समाविष्ट करतात.
assertNull एक JUnit प्रतिपादन पद्धत जी विशिष्ट ऑब्जेक्ट शून्य आहे की नाही हे तपासते. या संदर्भात, हे सुनिश्चित करते की सशर्त डेटा हाताळणी प्रमाणित करून, ऑपरेशननंतर रिक्त राहण्याचा हेतू असलेली फील्ड (जसे की रद्द करण्यायोग्य स्तंभ) खरोखर शून्य आहेत.

PostgreSQL सह JPA मध्ये पॅरामीटर प्रकारातील त्रुटी सोडवणे

कोड उदाहरणे वापरताना आढळलेली एक सामान्य त्रुटी पत्ता प्रदान करते मूळ SQL क्वेरी PostgreSQL वातावरणात JPA सह. जेव्हा एसक्यूएल पॅरामीटरचा डेटा प्रकार ओळखत नाही तेव्हा "पॅरामीटरचा डेटा प्रकार निर्धारित करू शकला नाही" त्रुटी संदेश येतो, विशेषतः सशर्त विधाने. पहिल्या पद्धतीमध्ये, JPA रेपॉजिटरी पद्धतीमधील मूळ SQL क्वेरी @Modifying आणि @Query भाष्ये वापरते. हा सेटअप डेव्हलपरना डाटाबेसमध्ये डायनॅमिक व्हॅल्यूसह डेटा घालण्याची परवानगी देतो. तथापि, “:arh” आणि “:arhToken” सारख्या रद्द करण्यायोग्य पॅरामीटर्ससह केस स्टेटमेंट वापरणे थोडे अवघड आहे. प्रकारातील अस्पष्टता टाळण्यासाठी, COALESCE फंक्शन वैध मूल्य परत केल्याचे सुनिश्चित करते, जरी “:arh” शून्य असले तरीही, PostgreSQL ला योग्य प्रकार शोधण्यात मदत होते. मिश्रित प्रकार किंवा सशर्त समाविष्ट केलेल्या डेटासह कार्य करताना हे विशेषतः उपयुक्त आहे.

आमच्या उदाहरणामध्ये @Param भाष्याद्वारे पॅरामीटर मॅपिंग देखील समाविष्ट आहे, जे नावानुसार SQL पॅरामीटर्सशी पद्धत वितर्क जोडते. एका क्वेरीमध्ये अनेक पॅरामीटर्स एकत्र करताना हे तंत्र कार्यक्षम आहे, कारण ते SQL स्टेटमेंटमध्ये थेट मूल्ये इंजेक्ट करते. "arh" रिकामे किंवा शून्य असू शकते अशा परिस्थितीत, हा सेटअप आवश्यकतेनुसार शून्य आणि नॉन-नल व्हॅल्यूमध्ये स्विच करून अखंड हाताळणीसाठी परवानगी देतो. विकसकांसाठी, हे डिझाइन केवळ डेटावर नियंत्रण वाढवत नाही तर क्वेरी अखंडता देखील सुनिश्चित करते. 🛠 उदाहरणार्थ, समजा आम्ही वेगवेगळ्या वापरकर्त्यांसाठी टोकन रेकॉर्ड करत आहोत आणि काही वापरकर्त्यांकडे पर्यायी "arh" मूल्य नाही. येथे, COALESCE आणि CASE गोष्टी स्वच्छ आणि कार्यक्षम ठेवून, वेगळ्या क्वेरी किंवा अतिरिक्त कोडची आवश्यकता न घेता या परिस्थिती हाताळतात.

दुसरा दृष्टिकोन वापरतो Jdbc टेम्पलेट, एसक्यूएल क्वेरी कार्यान्वित करण्यासाठी स्प्रिंगमधील मुख्य वर्ग. जेव्हा पॅरामीटर प्रकारांवर अधिक नियंत्रण आवश्यक असते तेव्हा हे समाधान सुलभ होते. JDBC स्थिरांकांसह डेटा प्रकार निर्दिष्ट करून, जसे की Types.OTHER आणि Types.VARCHAR, अपडेट पद्धत स्पष्टपणे प्रत्येक व्हेरिएबलसाठी पॅरामीटर प्रकार सेट करते. हे अतिरिक्त तपशील अस्पष्ट पॅरामीटर प्रकारांशी संबंधित त्रुटी दूर करण्यात मदत करते आणि सानुकूल मॅपिंगसाठी परवानगी देते, जसे की SQL OTHER प्रकारावर UUID मॅप करणे. काही स्तंभ विशेषीकृत डेटा प्रकार वापरतात अशा प्रकल्पांमध्ये काम करताना हे विशेषतः मौल्यवान असू शकते, कारण JdbcTemplate दृष्टिकोन JPA च्या डीफॉल्ट प्रकार गृहीतकांवर अवलंबून न राहता क्वेरीला या फील्डशी थेट संवाद साधण्याची परवानगी देतो.

शेवटी, आमची उदाहरणे JUnit वापरून युनिट चाचण्या समाविष्ट करतात, ज्यात परिणामांची पडताळणी करण्यासाठी assertNotNull आणि assertNull प्रतिपादन समाविष्ट आहे. हे प्रतिपादन "एआरएच" पॅरामीटरच्या उपस्थितीच्या आधारावर अपेक्षेप्रमाणे टोकन योग्यरित्या घातलेले आहेत की नाही ते तपासतात. हा दृष्टिकोन सातत्यपूर्ण वर्तन सुनिश्चित करतो आणि समस्या लवकर शोधण्यात मदत करतो. उदाहरणार्थ, “arh” नसलेले टोकन पास केले असल्यास, assertNull हे तपासते की संबंधित डेटाबेस फील्ड शून्य आहे. हे डीबगिंग सुलभ करते आणि ॲप अपेक्षेप्रमाणे चालते याची खात्री करते. या सोल्यूशन्ससह, डेव्हलपर आत्मविश्वास बाळगू शकतात की त्यांचा ऍप्लिकेशन डायनॅमिक इनपुट्स सुंदरपणे हाताळतो आणि डेटाबेस अखंडता राखतो. 🔍

PostgreSQL सह JPA मधील पॅरामीटर प्रकार त्रुटी समजून घेणे आणि त्यांचे निराकरण करणे

सुधारित पॅरामीटर व्यवस्थापनासह JPA आणि मूळ प्रश्नांचा वापर करून उपाय

@Modifying
@Query(value = """
    INSERT INTO tokens (
        id,
        -- other columns --
        arh_token_column
    ) VALUES (
        :id,
        -- other values --
        CASE WHEN COALESCE(:arh, '') != '' THEN :arhToken ELSE  END
    )
""", nativeQuery = true)
void create(@Param("id") UUID id,
            @Param("arh") String arh,
            @Param("arhToken") String arhToken);

थेट डेटाबेस परस्परसंवादासाठी JDBC टेम्पलेट वापरणे

सानुकूल SQL अंमलबजावणीसाठी JDBC टेम्पलेटसह दृष्टीकोन

कार्यक्षमता प्रमाणित करण्यासाठी युनिट चाचणी उपाय

रेपॉजिटरी आणि जेडीबीसी टेम्प्लेट सोल्यूशन्ससाठी JUnit चाचण्या

@Test
void testCreateWithArhToken() {
    UUID id = UUID.randomUUID();
    String arhToken = "SampleToken";
    repository.create(id, "arhValue", arhToken);
    assertNotNull(tokenRepository.findById(id));
}

@Test
void testCreateWithoutArhToken() {
    UUID id = UUID.randomUUID();
    repository.create(id, null, null);
    Token token = tokenRepository.findById(id).orElse(null);
    assertNull(token.getArhTokenColumn());
}

JPA आणि PostgreSQL मधील कॉम्प्लेक्स SQL ​​पॅरामीटर्स हाताळणे

PostgreSQL सह JPA वापरताना, आम्हाला कधीकधी पॅरामीटर प्रकारांशी संबंधित आव्हाने येतात, विशेषत: कंडिशनल लॉजिकचा समावेश असलेल्या प्रकरणांमध्ये. मूळ SQL क्वेरीमध्ये सशर्त मूल्य सेट करण्याचा प्रयत्न करताना एक महत्त्वाची समस्या उद्भवते, जिथे आम्हाला क्वेरीने फील्ड आहे की नाही हे तपासावे असे वाटते, जसे की "अरह", शून्य आहे. PostgreSQL या प्रकरणांमध्ये डेटा प्रकार निर्धारित करण्यासाठी संघर्ष करते कारण ते प्रत्येक पॅरामीटरसाठी एक स्पष्ट डेटा प्रकार अपेक्षित करते. डीफॉल्टनुसार, JPA PostgreSQL चे मार्गदर्शन करण्यासाठी पुरेशी माहिती देऊ शकत नाही, परिणामी "डेटा प्रकार पॅरामीटर निर्धारित करू शकलो नाही" सारख्या त्रुटी उद्भवू शकतात. ही प्रकरणे हाताळण्यासाठी, आम्ही वापरू शकतो COALESCE, एक SQL फंक्शन जे सूचीमध्ये प्रथम नॉन-नल एक्सप्रेशन देते किंवा JDBC टेम्पलेट्सद्वारे थेट डेटा प्रकार निर्दिष्ट करते.

वापरून सानुकूल क्वेरी तयार करणे हा दुसरा दृष्टिकोन आहे JdbcTemplate, जे पॅरामीटर प्रकारांवर थेट नियंत्रण ठेवण्यास अनुमती देते. उदाहरणार्थ, एखाद्या क्वेरीसाठी UUID आवश्यक असल्यास, जे मानक SQL मध्ये परिभाषित करणे सोपे नाही, आम्ही वापरू शकतो आत JdbcTemplate.update असे पॅरामीटर्स स्पष्टपणे हाताळण्यासाठी. जटिल डेटा स्ट्रक्चर्स हाताळताना ही लवचिकता विशेषत: मौल्यवान आहे, एकाधिक क्वेरी किंवा अतिरिक्त डेटाबेस कॉलम्सची आवश्यकता न ठेवता रद्द करण्यायोग्य पॅरामीटर्सची अचूक हाताळणी करण्यास अनुमती देते. बोनस म्हणून, JdbcTemplate अधिक ग्रॅन्युलर एरर-हँडलिंग पर्याय प्रदान करते, जे SQL एरर लॉग करण्यासाठी, क्वेरी पुन्हा प्रयत्न करण्यासाठी किंवा डेटा इंटिग्रिटी चेक हाताळण्यासाठी कॉन्फिगर केले जाऊ शकतात.

अधिक संरचित ऍप्लिकेशन्ससाठी, सोप्या केसेससाठी JPA आणि जटिल कंडिशनल लॉजिकसाठी JdbcTemplate चे संयोजन वापरणे एक मजबूत समाधान तयार करू शकते. हा दृष्टीकोन JPA ला मानक डेटा परस्परसंवाद व्यवस्थापित करण्यास अनुमती देतो तर JdbcTemplate नेटिव्ह SQL प्रकार किंवा सशर्त तपासणी आवश्यक असलेली प्रकरणे हाताळते. याव्यतिरिक्त, JUnit किंवा इतर चाचणी फ्रेमवर्कसह चाचणी पद्धती एकत्रित केल्याने हे सुनिश्चित होते की रद्द करण्यायोग्य पॅरामीटर्स आणि SQL परिस्थिती सर्व परिस्थितींमध्ये विश्वासार्हपणे कार्य करतात, विकासाच्या सुरुवातीच्या समस्यांना पकडतात. दोन्ही साधनांचा समतोल साधून, विकासक डेटा व्यवस्थापन कार्यक्षमता आणि अनुप्रयोग कार्यप्रदर्शन ऑप्टिमाइझ करू शकतात, SQL त्रुटी आणि रनटाइम अपवादांचे धोके कमी करू शकतात. 🎯

जेपीए आणि एसक्यूएल पॅरामीटर हँडलिंगबद्दल सामान्यपणे विचारले जाणारे प्रश्न

  1. PostgreSQL मध्ये "डेटा प्रकार पॅरामीटर $2 निर्धारित करू शकलो नाही" याचा अर्थ काय आहे?
  2. ही त्रुटी अनेकदा उद्भवते जेव्हा PostgreSQL a मध्ये पॅरामीटरच्या डेटा प्रकाराचा अंदाज लावू शकत नाही native SQL query. वापरत आहे COALESCE किंवा प्रकार स्पष्टपणे निर्दिष्ट केल्याने याचे निराकरण होऊ शकते.
  3. JPA क्वेरींमध्ये मी अस्पष्ट पॅरामीटर प्रकार कसे रोखू शकतो?
  4. एक उपाय वापरणे आहे COALESCE नॉन-नल फॉलबॅक मूल्य सुनिश्चित करण्यासाठी SQL क्वेरीमध्ये किंवा वापरत असल्यास थेट प्रकार निर्दिष्ट करा JdbcTemplate.
  5. काही प्रश्नांसाठी JPA ऐवजी JdbcTemplate का वापरावे?
  6. JdbcTemplate SQL प्रकारांवर अधिक नियंत्रण प्रदान करते, UUIDs, रद्द करण्यायोग्य फील्ड्स किंवा PostgreSQL ला स्पष्ट प्रकारच्या व्याख्या आवश्यक असलेल्या प्रकरणांमध्ये हाताळण्यासाठी ते आदर्श बनवते.
  7. JPA मध्ये @Modifying भाष्य कसे कार्य करते?
  8. एनोटेशन क्वेरीला डेटा-मॉडिफाइंग ऑपरेशन जसे की इन्सर्ट किंवा अपडेट म्हणून चिन्हांकित करते, जेपीएमधील डेटाबेसमध्ये बदल जतन करण्याची परवानगी देते.
  9. JPA भांडारांसाठी युनिट चाचण्या वापरणे आवश्यक आहे का?
  10. होय, वापरून युनिट चाचण्या assertNull आणि अचूक डेटा हाताळणी सुनिश्चित करून, डेटाबेस फील्ड योग्यरित्या शून्य किंवा सशर्त मूल्ये हाताळतात याची पुष्टी करू शकतात.
  11. Java मध्ये Optional.ofNullable वापरण्याचा काय फायदा आहे?
  12. हे टाळून संभाव्य शून्य मूल्ये सुरक्षितपणे हाताळते NullPointerException एक तयार करून Optional वस्तू
  13. मी PostgreSQL मध्ये रद्द करण्यायोग्य UUID फील्ड कसे हाताळू शकतो?
  14. वापरत आहे JdbcTemplate मध्ये UUID ला SQL पॅरामीटर्स म्हणून व्यवस्थापित करण्यास अनुमती देते, जरी रद्द करता येत नाही.
  15. JPA क्वेरीमध्ये @Param काय करतो?
  16. @Param भाष्य नामांकित क्वेरी पॅरामीटरशी मेथड पॅरामीटर लिंक करते, मूळ SQL क्वेरींमध्ये डेटा बाइंडिंग सुलभ करते.
  17. स्प्रिंग बूटमध्ये SQL त्रुटी लॉग करण्याचा सर्वोत्तम मार्ग कोणता आहे?
  18. वापरत आहे JdbcTemplate SQL एरर लॉगिंग कॉन्फिगरेशनला अनुमती देते, जे तपशीलवार ट्रॅकिंगसाठी ऍप्लिकेशन सेटिंग्जमध्ये सानुकूलित केले जाऊ शकते.
  19. मी जटिल SQL परिस्थितींसह JdbcTemplate वापरू शकतो का?
  20. होय, JdbcTemplate चे थेट SQL एक्झिक्यूशन जटिल SQL साठी अनुकूल बनवते, विशेषत: कंडिशनल स्टेटमेंटमध्ये एकाधिक रद्द करण्यायोग्य पॅरामीटर्स हाताळताना.

PostgreSQL आणि JPA मधील प्रकारच्या त्रुटींचे निराकरण करणे

PostgreSQL सह JPA मधील प्रकारातील त्रुटी सोडवण्याकरता शून्य करण्यायोग्य पॅरामीटर्स आणि डेटा प्रकार अचूकतेकडे लक्ष देणे आवश्यक आहे. कंडिशनल इन्सर्ट सारख्या केसेससाठी COALESCE आणि JdbcTemplate वापरणे डेव्हलपरना नल कसे हाताळले जातात ते नियंत्रित करू देते, क्वेरी विश्वसनीयता सुधारते.

हा दृष्टीकोन मोठ्या डेटासेटसह व्यवहार करताना अधिक सोपी हाताळणी, वेळेची बचत आणि डीबगिंग प्रयत्न देखील त्रुटी बनवते. या पद्धतींसह, आपण हे सुनिश्चित करू शकता की आपल्या क्वेरी सुरळीतपणे कार्यान्वित होतील, जरी डायनॅमिक परिस्थितींचा समावेश असेल. 🛠

JPA आणि PostgreSQL सोल्यूशन्ससाठी प्रमुख स्रोत आणि संदर्भ
  1. पोस्टग्रेएसक्यूएल मधील SQL पॅरामीटर प्रकार त्रुटींचे निराकरण करण्यासाठी अंतर्दृष्टी प्रदान करते, शून्य मूल्ये आणि डायनॅमिक पॅरामीटर प्रकार हाताळण्यावर लक्ष केंद्रित करते. PostgreSQL अधिकृत दस्तऐवजीकरण
  2. स्प्रिंग डेटा JPA भाष्ये आणि मूळ SQL सह जटिल क्वेरी व्यवस्थापित करण्यासाठी त्यांचा वापर याबद्दल तपशीलवार माहिती. स्प्रिंग डेटा JPA दस्तऐवजीकरण
  3. थेट SQL अंमलबजावणी आणि पॅरामीटर व्यवस्थापनासाठी JdbcTemplate चे प्रगत वापर एक्सप्लोर करते, विशेषत: UUID सारख्या नॉन-स्टँडर्ड डेटा प्रकार व्यवस्थापित करण्यासाठी उपयुक्त. स्प्रिंग फ्रेमवर्क JdbcTemplate दस्तऐवजीकरण
  4. जावा ऑप्शनल आणि JPA रेपॉजिटरीजमध्ये पॅरामीटर मॅपिंग स्ट्रीमलाइनिंगसह रद्द करण्यायोग्य पॅरामीटर्स हाताळण्यासाठी अतिरिक्त तंत्रे. Baeldung - Java पर्यायी वापरणे