CreateClob () विधि के रूप में प्रासंगिक LOB निर्माण को अक्षम करने में त्रुटि हुई


87

मैं Oracle 10g के साथ हाइबरनेट 3.5.6 का उपयोग कर रहा हूं। मैं इनिशियलाइज़ेशन के दौरान नीचे दिए गए अपवाद को देख रहा हूँ लेकिन एप्लिकेशन स्वयं ठीक काम कर रहा है। इस अपवाद का कारण क्या है? और इसे कैसे सुधारा जा सकता है?

अपवाद
के रूप में प्रासंगिक LOB सृजन को अक्षम करने createClob()त्रुटि फेंक दिया विधि:java.lang.reflect.InvocationTargetException

जानकारी
Oracle संस्करण: Oracle डेटाबेस 10g एंटरप्राइज़ संस्करण रिलीज़ 10.2.0.4.0 JDBC ड्राइवर: Oracle JDBC ड्राइवर, संस्करण: 11.1.0.7.0


"एप्लिकेशन स्वयं ठीक काम कर रहा है" ... जब तक आप एलओबी का उपयोग करने की कोशिश नहीं करते, मैं कल्पना करता हूं।
Nyerguds 12

जवाबों:


76

नीचे संपत्ति जोड़कर इस चेतावनी को अक्षम करें।

वसंत आवेदन के लिए:

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false

सामान्य JPA:

hibernate.temp.use_jdbc_metadata_defaults=false

1
किस जावा संस्करण के साथ आपने यह कोशिश की? इंटेलीज इस संपत्ति को खोजने में असमर्थ है।
कॉमिवेंटर

हमने ग्रहण के साथ-साथ इंटेलीज के साथ प्रयास किया। दोनों मामलों में इसका कार्य। वास्तव में, हम java 6, 7,8 से थक चुके हैं और इसके बिना हमारे लिए कोई समस्या नहीं है। बस अपना कोड डीबग करें या अपने कोड की जांच करें।
नारायण यरबराचू

67

जैसा कि आपने देखा, यह अपवाद वास्तविक समस्या नहीं है। यह बूट के दौरान होता है, जब हाइबरनेट डेटाबेस से कुछ मेटा जानकारी प्राप्त करने की कोशिश करता है। यदि यह आपको परेशान करता है, तो आप इसे अक्षम कर सकते हैं:

hibernate.temp.use_jdbc_metadata_defaults false

1
धन्यवाद पार्टनॉन। मुझे इसे निष्क्रिय करने के विकल्प के बारे में पता है, लेकिन मैं इस अपवाद का कारण खोजने की कोशिश कर रहा हूं। कोई संकेत?
गिरीबाक़्स

6
जहां तक ​​मैं इसे समझता हूं, यह आपके आवेदन के साथ कोई समस्या नहीं है, हाइबरनेट केवल सत्यापित कर रहा है यदि DB कुछ सुविधाओं का समर्थन करता है और यदि ऐसा नहीं होता है तो अपने आप को समायोजित करता है। अगर कोई मैपिंग इसे ट्रिगर कर रहा है (एक LOB फ़ील्ड की तरह) तो मैं सत्यापित करूंगा, लेकिन यह चिंता की कोई बात नहीं है।
jpkrohling

5
चेतावनी : ओरेकल के साथ इस समाधान का उपयोग करना खतरनाक है ! यह अप्रत्याशित समितियों की ओर जाता है । जब हाइबरनेट अस्थायी टेबल बनाता है तो उसे एक नया लेनदेन खोलना पड़ता है, क्योंकि Oracle DB में COMML के बाद स्टेटमेंट कमिट करता है। इस विकल्प को गलत पर सेट करने से आप नए लेनदेन को खोल सकते हैं और डीडीएल को आपके लेनदेन के भीतर की समस्याएं मिलती हैं।
बोरिस ब्रैडस्की

@BorisBrodski, क्या आप सुनिश्चित हैं कि आपके द्वारा वर्णित व्यवहार इस संपत्ति को झूठी स्थापित करने के कारण है? कोड को देखते हुए, मुझे यह गलत होने पर कुछ भी निष्पादित नहीं होता है: github.com/hibernate/hibernate-orm/blob/…
jpkrohling

3
@jpkrohling हाँ, मैंने hibernate4.2.7 डीबग किया और देखा कि क्या खुद: सेट useJdbcMetadataकरने के लिए falseरोकता metaReportsDDLCausesTxnCommitहै और यह रहता है false! grepcode.com/file/repo1.maven.org/maven2/org.hibernate/…
बोरिस

28

स्रोत में टिप्पणियों को देखते हुए :

मूल रूप से यहाँ हम जाँच कर रहे हैं कि क्या हम java.sql को कॉल कर सकते हैं। LOB के निर्माण के लिए विधि JDBC 4 में जोड़ा गया। हम न केवल जाँच करते हैं कि java.sql.Connection इन विधियों को घोषित करता है, बल्कि वास्तविक java.sql.Connection को भी। उदाहरण उन्हें लागू करता है (यानी केवल एक अपवाद को फेंक दिए बिना कहा जा सकता है)।

तो, यह निर्धारित करने की कोशिश कर रहा है कि क्या यह कुछ नए जेडीबीसी 4 तरीकों का उपयोग कर सकता है। मुझे लगता है कि आपका ड्राइवर नई LOB निर्माण विधि का समर्थन नहीं कर सकता है।


5
इसका मतलब यह है कि Driver does not support LOB featureया Database does not support LOB feature?
मारेक सेबेरा

@MarekSebera ड्राइवर। मुझे यह समस्या हो रही है क्योंकि एक रहस्यमय संस्करण के साथ मेरी C3P0 लाइब्रेरी को कुछ रहस्यमय तरीके से ओवरराइड कर रहा है। डेटाबेस इसे ठीक समर्थन करता है।
Nyerguds

24

अपवाद को छिपाने के लिए:

हाइबरनेट 5.2 (और स्प्रिंग बूट 2.0) के लिए, आप या तो use_jdbc_metadata_defaults का उपयोग कर सकते हैं जिसे अन्य लोगों ने बताया:

# Meant to hide HHH000424: Disabling contextual LOB creation as createClob() method threw error 
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false

या, यदि आप उपर्युक्त सेटिंग से कोई साइड इफेक्ट नहीं करना चाहते हैं (कुछ ओरेकल साइड इफेक्ट्स के बारे में हमें चेतावनी देते हुए एक टिप्पणी है, मुझे नहीं पता कि यह वैध है या नहीं), आप इस तरह से अपवाद के लॉगिंग को अक्षम कर सकते हैं :

logging:
   level: 
      # Hides HHH000424: Disabling contextual LOB creation as createClob() method threw error 
      org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl: WARN

21

अपवाद से छुटकारा पाने के लिए

INFO - HHH000424: Disabling contextual LOB creation as createClob() method threw error :java.lang.reflect.InvocationTargetException

में hibernate.cfg.xmlफ़ाइल संपत्ति के नीचे जोड़ें

<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>

5
यह वही उत्तर है जो स्टीव के। का है। आप फिर से इसका उत्तर क्यों देते हैं?
बेवर

4
@ क्या उसने समस्या के बारे में बताया लेकिन मैंने जवाब दिया।
उदयकिरण पुलिपति

2
आप केवल पहले से दिए गए उत्तर की प्रतिलिपि बनाकर अद्यतन करना चाहते हैं। आपका उत्तर स्टीव के। से अलग नहीं है
बीवर

2
धन्यवाद। इस आधार पर, मैं जोड़ा <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" /> करने के लिए persistence.xmlफ़ाइल और यह मेरे लिए समस्या हल हो जाती। मैं JPA का उपयोग हाइबरनेट के साथ करता हूं।
dschulz

4
@ मेरे लिए एक नौसिखिए के लिए ईमानदार होना यह उत्तर भाग में बहुत स्पष्ट है जहां मुझे यह संपत्ति
डालनी

14

हाइबरनेट 4.3.x / 5.0.x का उपयोग करने के लिए इसे अपडेट करें - आप इस संपत्ति को सही पर सेट कर सकते हैं:

<prop key="hibernate.jdbc.lob.non_contextual_creation">true</prop>

उस त्रुटि संदेश से छुटकारा पाने के लिए। एक ही प्रभाव लेकिन "फेंक दिया अपवाद" विस्तार के बिना। विवरण के लिए LobCreatorBuilder स्रोत देखें।


इसे दृढ़ता में
रखें। xml


6

जैसा कि अन्य टिप्पणियों में उल्लेख किया गया है

hibernate.temp.use_jdbc_metadata_defaults = false

... कष्टप्रद संदेश को ठीक करेगा, लेकिन कई अन्य आश्चर्यजनक समस्याएं पैदा कर सकता है। बेहतर समाधान सिर्फ इसके साथ प्रासंगिक एलओबी निर्माण को निष्क्रिय करना है:

hibernate.jdbc.lob.non_contextual_creation = true

इसका कारण हाइबरनेट होगा (मेरे मामले में, इसके 5.3.10.Final) को JDBC ड्राइवर की जांच करने के लिए छोड़ देना और सिर्फ निम्नलिखित का पालन करना:

HHH000421: Disabling contextual LOB creation as hibernate.jdbc.lob.non_contextual_creation is true

अब तक ऐसा लगता है कि यह सेटिंग किसी भी समस्या का कारण नहीं है।


4

JDBC ड्राइवर को नवीनतम संस्करण में अपडेट करने से गंदा त्रुटि संदेश हटा दिया गया।

इसे आप यहां से डाउनलोड कर सकते है:

http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html

हालांकि नि: शुल्क पंजीकरण आवश्यक है।


4

यदि आप सेट करते हैं:

hibernate.temp.use_jdbc_metadata_defaults: false

जब आपकी तालिका का नाम उपयोगकर्ता की तरह आरक्षित शब्द होता है, तो यह आपको PostgreSQL से परेशान कर सकता है। डालने के बाद इसके साथ आईडी अनुक्रम खोजने की कोशिश करेंगे:

select currval('"user"_id_seq');

जो स्पष्ट रूप से विफल हो जाएगा। कम से कम हाइबरनेट 5.2.13 और स्प्रिंग बूट 2.0.0.RC1 के साथ। इस संदेश को रोकने के लिए कोई अन्य तरीका नहीं मिला है, इसलिए अब इसे अनदेखा करें।


2

स्प्रिंग बूट 2.1.x के साथ काम करते समय यह चेतावनी संदेश आवेदन शुरू करते समय दिखाई देता है।

जैसा कि यहां बताया गया है, हो सकता है कि यह समस्या पुराने संस्करणों में दिखाई न दे क्योंकि संबंधित संपत्ति डिफ़ॉल्ट रूप से सही पर सेट थी और अब यह गलत है:

https://github.com/spring-projects/spring-boot/issues/12007

परिणाम में, इसे हल करना सरल है जैसा कि वसंत प्रॉपर्टी में निम्नलिखित संपत्ति को जोड़ना है।

spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation = true

इसके लिए धन्यवाद। लॉग इनो मोड में एक अपवाद ट्रेस वास्तव में कष्टप्रद है!
डैनियल फर्नांडीज

1

आपके द्वारा उचित JDBC का चयन नहीं करने के कारण समस्या होती है। बस डाउनलोड करें और 11g के बजाय oracle 10g के लिए JDBC का उपयोग करें।


हुह। यह पूरी तरह से बोरिस ब्रैडस्की की प्रतिक्रिया का खंडन करता है। आपको यकीन है कि इससे कोई फर्क पड़ता है?
Nyerguds 13

1

मैं 5.3.17 हाइबरनेट का उपयोग कर रहा हूं और यह दिए गए गुणों को जोड़कर ठीक काम करता है

hibernate.default_entity_mode=dynamic-map
hibernate.temp.use_jdbc_metadata_defaults=true
hibernate.jdbc.lob.non_contextual_creation = true

धन्यवाद


0

मैंने इस त्रुटि को तब मारा जब मेरे वेब ऐप को लिनक्स में उपयोगकर्ता द्वारा अपर्याप्त पहुँच अधिकारों के साथ लॉग इन किया जाने लगा। यह गलती

org.hibernate।

आम तौर पर अन्य त्रुटियों / अपवादों से पहले, विशेष रूप से आपके एप्लिकेशन सर्वर से यानी टॉमकैट से:

org.apache.catalina.LifecycleException: घटक को प्रारंभ करने में विफल ...

या

java.lang.UnsatisfiedLinkError: ... साझा की गई ऑब्जेक्ट फ़ाइल को नहीं खोल सकता: ऐसी कोई फ़ाइल या निर्देशिका नहीं

समाधान:

  1. अपने वेब एप्लिकेशन को वर्तमान आवृत्ति रोकें।

  2. सुपर उपयोगकर्ता या पर्याप्त पहुँच अधिकार यानी रूट के साथ लॉगिन करें

  3. अपने वेब ऐप को पुनरारंभ करें या पिछले फ़ंक्शन को फिर से कॉल करें।


0

जो कोई भी स्प्रिंग बूट 2 के साथ इस समस्या का सामना कर रहा है

डिफ़ॉल्ट रूप से स्प्रिंग बूट हाइबरनेट 5.3.x संस्करण का उपयोग कर रहा था, मैंने अपने pom.xml में निम्नलिखित संपत्ति जोड़ी है

<hibernate.version>5.4.2.Final</hibernate.version>

और त्रुटि हो गई थी। उपरोक्त पदों में त्रुटि का कारण पहले से ही बताया गया है



-3

जांचें कि क्या आप वीपीएन पर नहीं हैं। मैं एक ही मुद्दा था, लेकिन मुझे पता चला कि मैं रिमोट से जुड़ रहा था!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.