it-swarm.com.de

Deaktivieren der kontextabhängigen LOB-Erstellung, da die createClob () - Methode einen Fehler ausgelöst hat

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 kontextabhängigen LOB-Erstellung als createClob()-Methode hat einen Fehler ausgelöst: Java.lang.reflect.InvocationTargetException

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

64
GiriByaks

Wie Sie bemerkt haben, ist diese Ausnahme kein echtes Problem. Dies geschieht während des Startvorgangs, wenn Hibernate versucht, einige Metainformationen aus der Datenbank abzurufen. Wenn Sie dies ärgert, können Sie es deaktivieren:

hibernate.temp.use_jdbc_metadata_defaults false
60
jpkrohling

Deaktivieren Sie diese Warnung, indem Sie unten Eigenschaften hinzufügen. 

Für die Frühjahrsanwendung:

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

Normales JPA:

hibernate.temp.use_jdbc_metadata_defaults=false
46

Betrachten Sie die Kommentare in der source :

Grundsätzlich prüfen wir hier einfach ob wir das nennen können Java.sql.Connection-Methoden für LOB Erstellung in JDBC 4 hinzugefügt. Wir nicht nur Prüfen Sie, ob die Java.sql.Connection deklariert diese Methoden, aber auch ob die tatsächliche Java.sql.Connection Die Instanz implementiert sie (d. h. kann aufgerufen werden, ohne dass einfach eine -Ausnahme ausgelöst wird).

Es wird also versucht festzustellen, ob einige neue JDBC 4-Methoden verwendet werden können. Ich denke, Ihr Treiber unterstützt möglicherweise nicht die neue LOB-Erstellungsmethode.

24
Steve K

Um die Ausnahme zu beseitigen

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

In hibernate.cfg.xml-Datei fügen Sie die Eigenschaft unten hinzu

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

Um die Ausnahme auszublenden:

Für Hibernate 5.2 (und Spring Boot 2.0) können Sie entweder die use_jdbc_metadata_defaults -Eigenschaft verwenden, 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

Wenn Sie keine Nebeneffekte von der obigen Einstellung haben möchten (ein Kommentar warnt uns vor einigen Oracle-Nebeneffekten, ich weiß nicht, ob sie gültig ist oder nicht), können Sie einfach die Protokollierung der Ausnahme wie folgt deaktivieren :

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

Aktualisieren Sie dies, wenn Sie Hibernate 4.3.x/5.0.x verwenden. Sie können diese Eigenschaft einfach auf true setzen:

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

diese Fehlermeldung loszuwerden. Derselbe Effekt, jedoch ohne das Detail "Warf Exception" . Weitere Informationen finden Sie in der LobCreatorBuilder-Quelle.

10
Torsten Krah

Beim Aktualisieren des JDBC-Treibers auf die neueste Version wurde die unangenehme Fehlermeldung entfernt.

Sie können es hier herunterladen:

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

Eine kostenlose Registrierung ist jedoch erforderlich.

4
Boris Brodski

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

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
3
Rupesh Patil

Wenn Sie einstellen:

hibernate.temp.use_jdbc_metadata_defaults: false

dies kann zu Problemen mit PostgreSQL führen, wenn der Tabellenname reservierte Wörter wie Benutzer enthält. Nach dem Einfügen wird versucht, die ID-Sequenz mit zu finden:

select currval('"user"_id_seq');

das wird offensichtlich scheitern. Dies zumindest mit Hibernate 5.2.13 und Spring Boot 2.0.0.RC1. Es wurde kein anderer Weg gefunden, um diese Nachricht zu unterbinden, also einfach ignorieren.

3
kettunen

Wie in anderen Kommentaren erwähnt mit

hibernate.temp.use_jdbc_metadata_defaults = false

... behebt die lästige Nachricht, kann aber zu vielen anderen überraschenden Problemen führen. Eine bessere Lösung besteht darin, die kontextbezogene LOB-Erstellung folgendermaßen zu deaktivieren:

hibernate.jdbc.lob.non_contextual_creation = true

Dadurch wird Hibernate (in meinem Fall 5.3.10.Final) veranlasst, das Prüfen des JDBC-Treibers zu überspringen und nur die folgende Meldung auszugeben:

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

Bisher sieht es so aus, als würde diese Einstellung keine Probleme verursachen.

1
Jacek Prucia

Das Problem tritt auf, weil Sie die entsprechende JDBC nicht ausgewählt haben. Laden Sie einfach die JDBC für Oracle 10g und nicht 11g herunter.

1
sami

Diese Fehlermeldung ist aufgetreten, als meine Web-App von einem Benutzer mit unzureichenden Zugriffsrechten in Linux gestartet wurde. Dieser Fehler

org.hibernate.engine.jdbc.internal.LobCreatorBuilder - HHH000424: Das Deaktivieren der kontextabhängigen LOB-Erstellung als createClob () -Methode hat den folgenden Fehler ausgelöst: Java.lang.reflect.InvocationTargetException

in der Regel gehen andere Fehler/Ausnahmen einher, insbesondere von Ihrem Anwendungsserver, d. h. __ für Tomcat:

org.Apache.catalina.LifecycleException: Komponente konnte nicht initialisiert werden ...

oder 

Java.lang.UnsatisfiedLinkError: ... kann die gemeinsam genutzte Objektdatei nicht öffnen: Keine solche Datei oder ein solches Verzeichnis

Lösung:

  1. Stoppen Sie die aktuelle Instanz Ihrer Webanwendungen. 

  2. Melden Sie sich mit Superuser oder Benutzern mit ausreichenden Zugriffsrechten an, z. B. root 

  3. Starten Sie Ihre Web-App neu oder rufen Sie die vorherige Funktion erneut auf.

0
peterong