web-dev-qa-db-fra.com

La désactivation de la création LOB contextuelle en tant que méthode createClob () a généré une erreur

J'utilise Hibernate 3.5.6 avec Oracle 10g. Je vois l'exception ci-dessous pendant l'initialisation, mais l'application elle-même fonctionne correctement. Quelle est la cause de cette exception? et comment cela peut-il être corrigé?

Exception
La désactivation de la création LOB contextuelle en tant que createClob() a renvoyé une erreur: Java.lang.reflect.InvocationTargetException

Info
Version Oracle: Base de données Oracle 10g Enterprise Edition 10.2.0.4.0 Pilote JDBC: Pilote JDBC Oracle, version: 11.1.0.7.0

64
GiriByaks

Comme vous l'avez remarqué, cette exception n'est pas un réel problème. Cela se produit lors du démarrage, quand Hibernate essaie de récupérer des méta-informations de la base de données. Si cela vous agace, vous pouvez le désactiver:

hibernate.temp.use_jdbc_metadata_defaults false
60
jpkrohling

Désactivez cet avertissement en ajoutant la propriété ci-dessous. 

Pour application printanière:

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

JPA normal:

hibernate.temp.use_jdbc_metadata_defaults=false
46
Narayan Yerrabachu

En regardant les commentaires dans la source :

Fondamentalement, ici, nous vérifions simplement si nous pouvons appeler le Méthodes Java.sql.Connection pour LOB création ajoutée dans JDBC 4. Nous non seulement vérifiez si le fichier Java.sql.Connection déclare ces méthodes, mais aussi si la connexion Java.sql.Connexion réelle exemple les implémente (c’est-à-dire qu’on peut appeler sans simplement lever une exception ).

Donc, il essaie de déterminer s'il peut utiliser certaines nouvelles méthodes JDBC 4. J'imagine que votre pilote peut ne pas prendre en charge la nouvelle méthode de création LOB.

24
Steve K

Se débarrasser de l'exception

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

Dans le fichier hibernate.cfg.xml, ajoutez la propriété ci-dessous

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

Afin de cacher l'exception:

Pour Hibernate 5.2 (et Spring Boot 2.0), vous pouvez utiliser la propriété use_jdbc_metadata_defaults que les autres ont indiquée:

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

Ou, si vous souhaitez que le paramètre ci-dessus ne provoque aucun effet secondaire (un commentaire nous avertit à propos de certains effets secondaires Oracle, je ne sais pas s'il est valide ou non), vous pouvez simplement désactiver la journalisation de l'exception comme ceci :

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

Effectuez la mise à jour pour utiliser Hibernate 4.3.x/5.0.x - vous pouvez simplement définir cette propriété sur true:

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

se débarrasser de ce message d'erreur. Même effet, mais sans le détail "levée d'exception" ..__ Voir Source de LobCreatorBuilder pour plus de détails.

10
Torsten Krah

La mise à jour du pilote JDBC vers la dernière version a supprimé le message d'erreur désagréable.

Vous pouvez le télécharger à partir d'ici:

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

Une inscription gratuite est requise cependant.

4
Boris Brodski

Ajoutez simplement la ligne ci-dessous dans application.properties

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

Si vous définissez:

hibernate.temp.use_jdbc_metadata_defaults: false

cela peut causer des problèmes avec PostgreSQL lorsque le nom de votre table contient Word comme utilisateur réservé Après insertion, il essaiera de trouver la séquence id avec:

select currval('"user"_id_seq');

qui va évidemment échouer. Ceci au moins avec Hibernate 5.2.13 et Spring Boot 2.0.0.RC1. N'ayant pas trouvé d'autre moyen d'empêcher ce message, ignorez-le maintenant.

3
kettunen

Comme mentionné dans d'autres commentaires en utilisant

hibernate.temp.use_jdbc_metadata_defaults = false

... résoudra le message ennuyant, mais peut conduire à de nombreux autres problèmes surprenants. Une meilleure solution consiste simplement à désactiver la création LOB contextuelle avec ceci:

hibernate.jdbc.lob.non_contextual_creation = true

Hibernate (dans son cas, son 5.3.10.Final) ignorera donc de vérifier le pilote JDBC et produira simplement le message suivant:

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

Jusqu'à présent, il semble que ce paramètre ne pose aucun problème.

1
Jacek Prucia

Le problème se produit parce que vous n'avez pas choisi le JDBC approprié. Il suffit de télécharger et d'utiliser JDBC pour Oracle 10g plutôt que 11g.

1
sami

J'ai rencontré cette erreur lorsque mon application Web a été lancée sous Linux par un utilisateur connecté avec des droits d'accès insuffisants. Cette erreur

org.hibernate.engine.jdbc.internal.LobCreatorBuilder - HHH000424: La désactivation de la création LOB contextuelle en tant que méthode createClob () renvoyait une erreur: Java.lang.reflect.InvocationTargetException

généralement précédé par d'autres erreurs/exceptions, notamment de votre serveur d'applications, c'est-à-dire pour Tomcat:

org.Apache.catalina.LifecycleException: Échec d'initialisation du composant ...

ou 

Java.lang.UnsatisfiedLinkError: ... ne peut pas ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type

Solution:

  1. Arrêtez l'instance actuelle de vos applications Web. 

  2. Connectez-vous avec le super utilisateur ou ceux avec les droits d'accès suffisants i.e root 

  3. Redémarrez votre application Web ou appelez à nouveau la fonction précédente.

0
peterong