J'utilise Hibernate 3.5.6 avec Oracle 10g. Je vois l'exception ci-dessous lors de 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
Désactivation de la création de LOB contextuel en tant que createClob()
méthode a généré une erreur:java.lang.reflect.InvocationTargetException
Info
Version Oracle: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 Pilote JDBC: pilote Oracle JDBC, version: 11.1.0.7.0
Réponses:
Désactivez cet avertissement en ajoutant la propriété ci-dessous.
Pour l'application de printemps:
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
JPA normal:
hibernate.temp.use_jdbc_metadata_defaults=false
la source
Comme vous l'avez remarqué, cette exception n'est pas un réel problème. Cela se produit pendant le démarrage, lorsque Hibernate tente de récupérer des méta-informations de la base de données. Si cela vous ennuie, vous pouvez le désactiver:
hibernate.temp.use_jdbc_metadata_defaults false
la source
useJdbcMetadata
surfalse
empêchemetaReportsDDLCausesTxnCommit
d'être défini et ça restefalse
! grepcode.com/file/repo1.maven.org/maven2/org.hibernate/…En regardant les commentaires dans la source :
Donc, il essaie de déterminer s'il peut utiliser de nouvelles méthodes JDBC 4. Je suppose que votre pilote peut ne pas prendre en charge la nouvelle méthode de création LOB.
la source
Driver does not support LOB feature
ouDatabase does not support LOB feature
?Pour masquer l'exception:
Pour Hibernate 5.2 (et Spring Boot 2.0), vous pouvez soit utiliser la propriété use_jdbc_metadata_defaults que les autres ont signalé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 voulez ne pas avoir d'effets secondaires du paramètre ci-dessus (il y a un commentaire nous avertissant de certains effets secondaires d'Oracle, je ne sais pas si c'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
la source
Pour se débarrasser de l'exception
INFO - HHH000424: Disabling contextual LOB creation as createClob() method threw error :java.lang.reflect.InvocationTargetException
Dans le
hibernate.cfg.xml
fichier Ajouter ci-dessous la propriété<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
la source
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" />
aupersistence.xml
fichier et cela a résolu le problème pour moi. J'utilise JPA avec Hibernate.Mettez à jour ceci 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>
pour se débarrasser de ce message d'erreur. Même effet mais sans le détail "jeté exception". Voir la source LobCreatorBuilder pour plus de détails.
la source
Ajoutez simplement la ligne ci-dessous dans application.properties
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
la source
Comme mentionné dans d'autres commentaires utilisant
hibernate.temp.use_jdbc_metadata_defaults = false
... corrigera le message ennuyeux, mais peut entraîner de nombreux autres problèmes surprenants. La meilleure solution consiste simplement à désactiver la création de LOB contextuel avec ceci:
hibernate.jdbc.lob.non_contextual_creation = true
Cela obligera Hibernate (dans mon cas, son 5.3.10.Final) à ignorer l'analyse du pilote JDBC et à afficher 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.
la source
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 cependant requise.
la source
Si vous définissez:
hibernate.temp.use_jdbc_metadata_defaults: false
cela peut vous causer des problèmes avec PostgreSQL lorsque le nom de votre table contient un mot réservé comme user. Après l'insertion, il essaiera de trouver la séquence d'identifiants avec:
select currval('"user"_id_seq');
qui échouera évidemment. Ceci au moins avec Hibernate 5.2.13 et Spring Boot 2.0.0.RC1. Je n'ai pas trouvé d'autre moyen d'empêcher ce message, alors maintenant, il suffit de l'ignorer.
la source
Lorsque vous travaillez avec Spring boot 2.1.x, ce message d'avertissement apparaît lors du démarrage de l'application.
Comme indiqué ici, peut-être que ce problème n'apparaissait pas dans les versions antérieures car la propriété associée était définie sur true par défaut et maintenant elle est false:
https://github.com/spring-projects/spring-boot/issues/12007
En conséquence, résoudre ce problème est aussi simple que d'ajouter la propriété suivante au fichier spring application.property.
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation = true
la source
Le problème se produit parce que vous n'avez pas choisi le JDBC approprié. Il suffit de télécharger et d'utiliser le JDBC pour oracle 10g plutôt que 11g.
la source
J'utilise hibernate 5.3.17 et cela fonctionne bien en ajoutant des propriétés données
hibernate.default_entity_mode=dynamic-map hibernate.temp.use_jdbc_metadata_defaults=true hibernate.jdbc.lob.non_contextual_creation = true
Merci
la source
J'ai rencontré cette erreur lorsque mon application Web a été démarrée sous Linux par un utilisateur connecté avec des droits d'accès insuffisants. Cette erreur
généralement précédé d'autres erreurs / exceptions, notamment de votre serveur d'application c'est-à-dire pour Tomcat:
ou
Solution:
Arrêtez l'instance actuelle de vos applications Web.
Connectez-vous avec un super utilisateur ou avec des droits d'accès suffisants, par exemple root
Redémarrez votre application Web ou appelez à nouveau la fonction précédente.
la source
Pour tous ceux qui sont confrontés à ce problème avec Spring Boot 2
par défaut, spring boot utilisait la version hibernate 5.3.x, j'ai ajouté la propriété suivante dans mon pom.xml
<hibernate.version>5.4.2.Final</hibernate.version>
et l'erreur avait disparu. La raison de l'erreur est déjà expliquée dans les articles ci-dessus
la source
Supprimez les annotations @Temporal si vous l'utilisez avec les classes java.sql. *.
la source
Vérifiez si vous n'êtes pas sur un VPN. J'ai eu le même problème mais j'ai réalisé la db que je connectais à la télécommande!
la source