मैं अपनी मुट्ठी MyBatis एप्लिकेशन लिख रहा हूं और मैं @Select के आसपास अटक गया। मुझे नहीं पता कि मेरी @Select परिभाषा में क्या समस्या है, सब कुछ ठीक लगता है लेकिन मुझे एक Parameter not found अपवाद मिला है।

जब मैं अपने @Insert स्टेटमेंट में पैरामीटर पास करता हूं तो मैंने उसी पैटर्न का पालन किया है और यह बिना किसी समस्या के काम करता है।

मैं माईबैटिस 3.4.2 का उपयोग करता हूं।

यह मेरा @Select है:

@Select("SELECT * "
        + "FROM configuration "
        + "WHERE key_name = #{key} AND "
        +       "(#{userId} IS NULL AND user_id IS NULL) OR user_id = #{userId} AND "
        +       "status = 1")
Configuration findByKeyAndUserId(String key, Long userId);

अपवाद जो मुझे मिला:

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.apache.ibatis.binding.BindingException: Parameter 'key' not found. Available parameters are [arg1, arg0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'key' not found. Available parameters are [arg1, arg0, param1, param2]
2
zappee 19 फरवरी 2017, 00:23

2 जवाब

सबसे बढ़िया उत्तर

जब आप एक एकल पैरामीटर ऑब्जेक्ट पास करते हैं, तो गुणों को सीधे गेटर या मानचित्र के लिए कुंजी सेट के माध्यम से एक्सेस किया जाता है। जब आप विधि में कई पैरामीटर पास करना चाहते हैं, तो आपको पैरामीटर को एनोटेशन के साथ नाम देना होगा:

Configuration findByKeyAndUserId(@Param("key") String key, @Param("userId") Long userId);

यह एनोटेशन आधारित सिंटैक्स वास्तव में की-वैल्यू मैप की तरह व्यवहार करता है। कुंजियाँ @Param द्वारा प्रदान की जाती हैं। पैरामीटर चर के लिए आपके द्वारा चुना गया नाम दिखाई नहीं दे रहा है।

2
blackwizard 19 फरवरी 2017, 17:44

कृपया JDK 8 के बाद से उपलब्ध कराए गए -parameters संकलन विकल्प का प्रयास करें। आप @Param एनोटेशन को छोड़ सकते हैं।

देखें https://github.com/mybatis/mybatis-3/issues/549

धन्यवाद।

1
Kazuki Shimizu 21 फरवरी 2017, 23:16
क्या आप जानते हैं कि "-पैरामीटर" का उपयोग करने के लिए मेवेन और इंटेलिज को कैसे कॉन्फ़िगर करें? मैंने अपने मेवेन-कंपाइलर-प्लगइन में -पैरामीटर जोड़ा लेकिन कोई प्रभाव नहीं पड़ा। Intellij: बिल्ड, एक्ज़ीक्यूशन, परिनियोजन> कंपाइलर> जावा कंपाइलर> अतिरिक्त कमांड लाइन पैरामीटर लेकिन यह काम नहीं करता है। शायद मुझे इस पर और समय बिताने की ज़रूरत है :(
 – 
zappee
22 फरवरी 2017, 00:24
इंटेलीज: आप सही कह रहे हैं !! हालाँकि आपको अपनी परियोजना का पुनर्निर्माण करना चाहिए। (निष्पादित करें "बिल्ड> प्रोजेक्ट का पुनर्निर्माण करें")।
 – 
Kazuki Shimizu
23 फरवरी 2017, 03:09
मावेन: <प्लगइन> org.apache.maven.plugins maven-compiler-plugin <कॉन्फ़िगरेशन> -पैरामीटर यह ठीक काम कर रहा है।
 – 
Kazuki Shimizu
23 फरवरी 2017, 03:13
ग्रहण: जावा> कंपाइलर> "विधि मापदंडों के बारे में जानकारी संग्रहीत करें (प्रतिबिंब के माध्यम से प्रयोग करने योग्य) की जाँच की जाती है
 – 
Kazuki Shimizu
23 फरवरी 2017, 03:23