2015-01-28 6 views
11

मैं डेटाबेस के रूप में MySQL का उपयोग कर स्प्रिंग जेपीए एप्लिकेशन पर काम कर रहा हूं। मैंने सुनिश्चित किया कि सभी वसंत-जेपीए पुस्तकालय, हाइबरनेट और माइस्क्ल-कनेक्टर-जावा लोड हो गए हैं।जेडीबीसी प्रकार के लिए कोई डायलेक्ट मैपिंग नहीं: 1111

मैं एक MySQL 5 उदाहरण चला रहा हूं।

spring.jpa.show-sql=false 
spring.jpa.hibernate.ddl-auto=create-drop 
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect 

spring.datasource.url=jdbc:mysql://localhost/mydatabase 
spring.datasource.username=myuser 
spring.datasource.password=SUPERSECRET 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 

जब एक एकीकरण परीक्षण को क्रियान्वित करने, वसंत startsup ठीक से लेकिन हाइबरनेट SessionFactory बनाने पर विफल रहता है, अपवाद के साथ: यहाँ मेरी application.properties फ़ाइल की एक अंश है

org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111 

मुझे लगता है कि मेरी बोलियों MySQL 5Dialect होना चाहिए, मैंने स्पष्ट रूप से इनो डीबी को स्पष्ट करने की कोशिश की, और दो बोली विकल्प जो संस्करण 5 को इंगित नहीं करते हैं। लेकिन मैं हमेशा जेडीबीसी प्रकार: 1111 'संदेश के लिए' कोई डायलेक्ट मैपिंग 'के साथ समाप्त होता हूं। मेरी application.properties फ़ाइल परीक्षण/संसाधन स्रोत फ़ोल्डर में रहता है। यह जुनीट टेस्ट धावक द्वारा मान्यता प्राप्त है (मुझे पहले इसमें एक टाइपो के कारण अपवाद मिला)।

क्या संपत्तियां गलत हैं? मुझे इन संपत्ति नामों पर कुछ आधिकारिक दस्तावेज नहीं मिल सका, लेकिन इस स्टैक ओवरफ्लो उत्तर में एक संकेत मिला: https://stackoverflow.com/a/25941616/1735497

आपके उत्तरों के लिए तत्पर हैं, धन्यवाद!

बीटीडब्ल्यू एप्लिकेशन पहले से ही वसंत बूट का उपयोग कर रहा है।

+0

त्रुटि संदेश एक प्रकार है जो मैप नहीं किया जा सकता है में एक स्तंभ रिटर्न डेटा का मतलब है।'जेडीबीसी प्रकार के लिए कोई डायलेक्ट मैपिंग नहीं: 1111' java.sql.Types.OTHER' इंगित करता है। तालिका से आप किस कॉलम प्रकार का चयन करते हैं? – SubOptimal

+0

ओह, धन्यवाद। मैंने सोचा कि इसका मतलब बोली प्रकार है ... हाँ, मैं यूयूआईडी को आईडी के रूप में उपयोग करना पसंद करता हूं और हमने पहले पोस्टग्रेस के साथ काम किया था, जिसमें यूयूआईडी कॉलम प्रकार है। तो हम बस @ टाइप (टाइप = "पीजी-यूयूआईडी") कह सकते हैं; मुझे नहीं लगता कि MySQL में UUID कॉलम प्रकार है, हालांकि – SakeSushiBig

+0

बस पाया गया है कि यह पोस्टग्रेज़ के समान ही है: आईडी विशेषता को @ टाइप ("uuid-char") एनोटेशन लागू करें। – SakeSushiBig

उत्तर

10

यहाँ जवाब करने से इनकी से टिप्पणी के आधार पर:

त्रुटि संदेश वास्तव में कहना है कि एक स्तंभ प्रकार हाइबरनेट द्वारा एक डेटाबेस प्रकार के लिए मैप नहीं किया जा सकता है। मेरे मामले में यह java.util.UUID प्रकार था जो मैं अपनी कुछ इकाइयों में प्राथमिक कुंजी के रूप में उपयोग करता हूं। बस एनोटेशन @Type(type="uuid-char") (पोस्टग्रेस @Type(type="pg-uuid") के लिए)

+0

यदि आपको केवल HSQLDB पर परीक्षण वातावरण में अपवाद मिलता है - http://stackoverflow.com/questions/1007176/using-different-hibernate-user-types-in- अलग-अलग स्थितियों पर एक नज़र डालें – Lu55

+0

मैं Lu55 से सहमत हूं। जब तक यह वास्तव में जरूरी नहीं है तब तक आपको @ टाइप एनोटेशन नहीं जोड़ना चाहिए। लेकिन मैं वास्तव में जुड़े मुद्दे में दिए गए समाधानों से सहमत नहीं हूं (शायद वे बहुत पुराने हैं?)। इसलिए मैं अपने स्वयं के समाधान के साथ एक पोस्ट बना देता हूं: http://stackoverflow.com/questions/1007176/using-different-hibernate-user-types-in- अलग- स्थिति /40828806#40828806 – Tim

+0

या वैकल्पिक रूप से आपकी क्वेरी स्ट्रिंग में आप कर सकते हैं वाराकर को कास्टिंग भी करें: CAST (table_name.column_name VARCHAR के रूप में) AS table_name –

6

इस अपवाद को फेंकने वाला एक और आम उपयोग-मामला भी लागू होता है। कॉलिंग फ़ंक्शन जो void देता है। अधिक जानकारी और समाधान के लिए here पर जाएं।

3

कभी-कभी जब आप एसक्यूएल प्रक्रिया/फ़ंक्शन को कॉल करते हैं तो उसे कुछ वापस करने की आवश्यकता हो सकती है। आप लौटने शून्य की कोशिश कर सकते हैं: RETURN; या स्ट्रिंग (यह एक मेरे लिए काम किया): RETURN 'OK'

4

करें यदि कुछ स्तंभ Query में कई unknow प्रकार वापसी की जाँच करें।

जैसे: '1' COLUMN_NAME प्रकार अज्ञात

और 1 स्तंभ के रूप में हो सकता है के रूप में पूर्णांक सही एक है।

यह बात मेरे लिए काम करती है।

बड़े अक्षरों में वापसी प्रकार नहीं लिखते:

+1

मेरे पास अपने स्वयं के SqlResultMapping के साथ मूलभूत क्वेरी थी और यह समस्या थी, इसे क्वेरी में कास्ट जोड़कर इसे ठीक किया गया "CAST (कॉलममैपिंग नाम के रूप में 'staticstring' AS Varchar (50)) – dwana

0
किसी को भी एक पुराने हाइबरनेट (3.x) संस्करण के साथ यह त्रुटि मिलती लिए

। हाइबरनेट प्रकार कार्यान्वयन मानचित्रण लोअरकेस वापसी प्रकार का उपयोग करता है और उन्हें परिवर्तित नहीं करता:

CREATE OR REPLACE FUNCTION do_something(param varchar) 
    RETURNS integer AS 
$BODY$ 
... 
संबंधित मुद्दे