Das Deaktivieren der kontextbezogenen LOB-Erstellung als Methode createClob() hat einen Fehler ausgelöst

Lesezeit: 5 Minuten

Benutzer-Avatar
GiriByaks

Ich verwende Hibernate 3.5.6 mit Oracle 10g. Ich sehe die folgende Ausnahme während der Initialisierung, aber die Anwendung selbst funktioniert einwandfrei. Was ist die Ursache für diese Ausnahme? und wie kann es korrigiert werden?

Ausnahme

Deaktivieren der kontextbezogenen LOB-Erstellung als createClob() Methode hat Fehler ausgelöst: java.lang.reflect.InvocationTargetException

Die Info

Oracle-Version: Oracle Database 10g Enterprise Edition Version 10.2.0.4.0 JDBC-Treiber: Oracle JDBC-Treiber, Version: 11.1.0.7.0

  • “Die Anwendung selbst funktioniert gut” … solange Sie nicht versuchen, LOBs zu verwenden, stelle ich mir vor.

    – Nyerguds

    23. November 2015 um 12:05 Uhr

Benutzer-Avatar
Narayan Yerrabachu

Deaktivieren Sie diese Warnung, indem Sie unten eine Eigenschaft hinzufügen.

Für Frühjahrsanwendung:

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

Normales JPA:

hibernate.temp.use_jdbc_metadata_defaults=false

  • Mit welcher Java-Version hast du das versucht? Intellij kann diese Eigenschaft nicht finden.

    – comiventor

    6. Dezember 2017 um 8:53 Uhr

  • Wir haben es sowohl mit Eclipse als auch mit Intellij versucht. In beiden Fällen funktioniert es. Tatsächlich haben wir Java 6, 7,8 satt und es funktioniert ohne Probleme für uns. Debuggen Sie einfach Ihren Code oder überprüfen Sie Ihren Code.

    – Narayan Yerrabachu

    6. Dezember 2017 um 15:42 Uhr

Wie Sie bemerkt haben, ist diese Ausnahme kein echtes Problem. Es passiert während des Bootens, wenn Hibernate versucht, einige Metainformationen aus der Datenbank abzurufen. Wenn Sie das stört, können Sie es deaktivieren:

hibernate.temp.use_jdbc_metadata_defaults false

  • Danke Partenon. Mir ist die Option zum Deaktivieren bekannt, aber ich versuche, den Grund für diese Ausnahme zu finden. Irgendwelche Hinweise?

    – GiriByaks

    4. Januar 2011 um 13:55 Uhr

  • Soweit ich es verstehe, ist es kein Problem mit Ihrer Anwendung, Hibernate überprüft nur, ob die DB einige Funktionen unterstützt, und passt sich an, falls dies nicht der Fall ist. Ich würde überprüfen, ob eine Zuordnung dies auslöst (wie ein LOB-Feld), aber es ist kein Grund zur Sorge.

    – jpkohling

    4. Januar 2011 um 14:09 Uhr

  • WARNUNG: Die Verwendung dieser Lösung mit Oracle ist gefährlich! Es führt zu unerwartete COMMITs. Wenn der Ruhezustand temporäre Tabellen erstellt, muss eine neue Transaktion geöffnet werden, da DDL-Anweisungen in Oracle DB COMMIT implizieren. Indem Sie diese Option auf „false“ setzen, deaktivieren Sie das Öffnen einer neuen Transaktion und DDL erhält Probleme innerhalb Ihrer Transaktion, wenn Sie sie COMMITEN.

    – Boris Brodsky

    4. April 2014 um 14:22 Uhr


  • @BorisBrodski, sind Sie sicher, dass das von Ihnen beschriebene Verhalten dadurch verursacht wird, dass diese Eigenschaft auf false gesetzt wird? Wenn ich mir den Code ansehe, sehe ich nichts Zusätzliches, das ausgeführt wird, wenn dies falsch ist: github.com/hibernate/hibernate-orm/blob/… .

    – jpkohling

    7. April 2014 um 14:59 Uhr


  • @jpkrohling Ja, ich habe Hibernate4.2.7 debuggt und selbst gesehen: Setting useJdbcMetadata zu false verhindert metaReportsDDLCausesTxnCommit gesetzt werden und es bleibt false! grepcode.com/file/repo1.maven.org/maven2/org.hibernate/…

    – Boris Brodsky

    7. April 2014 um 15:43 Uhr


Betrachtet man die Kommentare in der Quelle:

Im Grunde prüfen wir hier einfach, ob wir die in JDBC 4 hinzugefügten java.sql.Connection-Methoden zur LOB-Erstellung aufrufen können. Wir prüfen nicht nur, ob die java.sql.Connection diese Methoden deklariert, sondern auch, ob die eigentliche java.sql.Connection Instanz implementiert sie (dh kann aufgerufen werden, ohne einfach eine Ausnahme auszulösen).

Es versucht also festzustellen, ob es einige neue JDBC 4-Methoden verwenden kann. Ich vermute, dass Ihr Treiber die neue LOB-Erstellungsmethode möglicherweise nicht unterstützt.

  • Bedeutet es das Driver does not support LOB feature oder Database does not support LOB feature ?

    – Marek Sebera

    15. Mai 2012 um 9:55 Uhr

  • @MarekSebera Fahrer. Ich habe dieses Problem, weil etwas auf mysteriöse Weise meine C3P0-Bibliothek mit einer alten Version überschreibt. Die Datenbank unterstützt es gut.

    – Nyerguds

    23. November 2015 um 12:10 Uhr

Um die Ausnahme auszublenden:

Für Hibernate 5.2 (und Spring Boot 2.0) können Sie entweder die use_jdbc_metadata_defaults Eigenschaft, auf die die anderen hingewiesen haben:

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

Oder wenn Sie keine Nebenwirkungen von der obigen Einstellung haben möchten (es gibt einen Kommentar, der uns vor einigen Oracle-Nebeneffekten warnt, ich weiß nicht, ob er gültig ist oder nicht), können Sie die Protokollierung der Ausnahme einfach so deaktivieren :

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

Benutzer-Avatar
UdayKiran Pulipati

Um die Ausnahme loszuwerden

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

Im hibernate.cfg.xml file Fügen Sie die folgende Eigenschaft hinzu

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

  • Dies ist die gleiche Antwort wie von Steve K. Warum antwortest du noch einmal?

    – Vorher

    25. April 2014 um 6:34 Uhr

  • @Bevor er das Problem erklärt, aber ich habe geantwortet.

    – UdayKiran Pulipati

    25. April 2014 um 7:05 Uhr

  • Sie möchten nur Updates befehlen, indem Sie eine bereits gegebene Antwort kopieren. Ihre Antwort unterscheidet sich nicht von Steve K.

    – Vorher

    29. April 2014 um 7:27 Uhr

  • Vielen Dank. Auf dieser Grundlage fügte ich hinzu <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" /> zum persistence.xml Datei und es löste das Problem für mich. Ich verwende JPA mit Hibernate.

    – dschulz

    21. März 2015 um 23:15 Uhr

  • @Bevor Um ehrlich zu sein, ist diese Antwort für einen Anfänger wie mich teilweise viel klarer, wo ich diese Eigenschaft platzieren soll

    – Anatoly Yakimchuk

    17. August 2016 um 10:38 Uhr


Aktualisieren Sie dies für die Verwendung von Hibernate 4.3.x / 5.0.x – Sie könnten diese Eigenschaft einfach auf “true” setzen:

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

diese Fehlermeldung loszuwerden. Gleicher Effekt, aber ohne das Detail “Threw Exception”. Siehe LobCreatorBuilder-Quelle für Details.

  • Dies ist die gleiche Antwort wie von Steve K. Warum antwortest du noch einmal?

    – Vorher

    25. April 2014 um 6:34 Uhr

  • @Bevor er das Problem erklärt, aber ich habe geantwortet.

    – UdayKiran Pulipati

    25. April 2014 um 7:05 Uhr

  • Sie möchten nur Updates befehlen, indem Sie eine bereits gegebene Antwort kopieren. Ihre Antwort unterscheidet sich nicht von Steve K.

    – Vorher

    29. April 2014 um 7:27 Uhr

  • Vielen Dank. Auf dieser Grundlage fügte ich hinzu <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" /> zum persistence.xml Datei und es löste das Problem für mich. Ich verwende JPA mit Hibernate.

    – dschulz

    21. März 2015 um 23:15 Uhr

  • @Bevor Um ehrlich zu sein, ist diese Antwort für einen Anfänger wie mich teilweise viel klarer, wo ich diese Eigenschaft platzieren soll

    – Anatoly Yakimchuk

    17. August 2016 um 10:38 Uhr


Benutzer-Avatar
sfan

Fügen Sie einfach die folgende Zeile in application.properties hinzu

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

1246700cookie-checkDas Deaktivieren der kontextbezogenen LOB-Erstellung als Methode createClob() hat einen Fehler ausgelöst

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy