Ich verwende Hibernate 3.5.6 mit Oracle 10g. Während der Initialisierung wird die folgende Ausnahme angezeigt, aber die Anwendung selbst funktioniert einwandfrei. Was ist die Ursache für diese Ausnahme? und wie kann es korrigiert werden?
Ausnahme Das
Deaktivieren der kontextbezogenen 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
Antworten:
Deaktivieren Sie diese Warnung, indem Sie unten eine Eigenschaft hinzufügen.
Für die Frühjahrsanwendung:
Normaler JPA:
quelle
Wie Sie bemerkt haben, ist diese Ausnahme kein wirkliches Problem. Dies geschieht während des Startvorgangs, wenn Hibernate versucht, einige Metainformationen aus der Datenbank abzurufen. Wenn Sie dies stört, können Sie es deaktivieren:
quelle
useJdbcMetadata
auffalse
verhindertmetaReportsDDLCausesTxnCommit
, gesetzt zu werden, und es bleibtfalse
! grepcode.com/file/repo1.maven.org/maven2/org.hibernate/…Schauen Sie sich die Kommentare in der Quelle an :
Es wird also versucht festzustellen, ob einige neue JDBC 4-Methoden verwendet werden können. Ich denke, Ihr Treiber unterstützt die neue LOB-Erstellungsmethode möglicherweise nicht.
quelle
Driver does not support LOB feature
oderDatabase does not support LOB feature
?Um die Ausnahme auszublenden:
Für Hibernate 5.2 (und Spring Boot 2.0) können Sie entweder die Eigenschaft use_jdbc_metadata_defaults verwenden , auf die die anderen hingewiesen haben:
Wenn Sie keine Nebenwirkungen aus der obigen Einstellung haben möchten (es gibt einen Kommentar, der uns vor einigen Oracle-Nebenwirkungen warnt, ich weiß nicht, ob diese gültig sind oder nicht), können Sie die Protokollierung der Ausnahme einfach so deaktivieren ::
quelle
Um die Ausnahme loszuwerden
In der
hibernate.cfg.xml
Datei Folgende Eigenschaft hinzufügenquelle
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" />
diepersistence.xml
Datei hinzugefügt und das Problem für mich gelöst. Ich benutze JPA mit Hibernate.Aktualisieren Sie dies für die Verwendung von Hibernate 4.3.x / 5.0.x - Sie können diese Eigenschaft einfach auf true setzen:
um diese Fehlermeldung loszuwerden. Gleicher Effekt, jedoch ohne das Detail "Ausnahmeregelung". Weitere Informationen finden Sie in der LobCreatorBuilder-Quelle.
quelle
Fügen Sie einfach die folgende Zeile in application.properties hinzu
quelle
Wie in anderen Kommentaren erwähnt mit
hibernate.temp.use_jdbc_metadata_defaults = false
... wird die nervige Nachricht beheben, 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
Dies führt dazu, dass Hibernate (in meinem Fall 5.3.10.Final) die Prüfung des JDBC-Treibers überspringt und nur die folgende Meldung ausgibt:
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.
quelle
Durch das 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.
quelle
Wenn Sie einstellen:
Dies kann zu Problemen mit PostgreSQL führen, wenn Ihr Tabellenname ein reserviertes Wort wie "Benutzer" enthält. Nach dem Einfügen wird versucht, die ID-Sequenz zu finden mit:
was offensichtlich scheitern wird. Dies zumindest mit Hibernate 5.2.13 und Spring Boot 2.0.0.RC1. Ich habe keinen anderen Weg gefunden, um diese Nachricht zu verhindern. Ignoriere sie jetzt einfach.
quelle
Das Problem tritt auf, weil Sie nicht den entsprechenden JDBC ausgewählt haben. Laden Sie einfach den JDBC herunter und verwenden Sie ihn für Oracle 10g anstatt für 11g.
quelle
Bei der Arbeit mit Spring Boot 2.1.x wird diese Warnmeldung beim Starten der Anwendung angezeigt.
Wie hier angegeben, ist dieses Problem in früheren Versionen möglicherweise nicht aufgetreten, da die zugehörige Eigenschaft standardmäßig auf true festgelegt wurde und jetzt false lautet:
https://github.com/spring-projects/spring-boot/issues/12007
Infolgedessen ist das Lösen so einfach wie das Hinzufügen der folgenden Eigenschaft zur Datei spring application.property.
quelle
Ich habe diesen Fehler festgestellt, als meine Web-App unter Linux von einem Benutzer gestartet wurde, der mit unzureichenden Zugriffsrechten angemeldet war. Dieser Fehler
In der Regel gehen andere Fehler / Ausnahmen voraus, insbesondere von Ihrem Anwendungsserver, z. B. für Tomcat:
oder
Lösung:
Stoppen Sie die aktuelle Instanz Ihrer Web-Apps.
Melden Sie sich mit einem Superuser oder solchen mit ausreichenden Zugriffsrechten an, z. B. root
Starten Sie Ihre Web-App neu oder rufen Sie die vorherige Funktion erneut auf.
quelle
Für alle, die mit Spring Boot 2 vor diesem Problem stehen
Standardmäßig verwendete Spring Boot die Version 5.3.x im Ruhezustand. Ich habe die folgende Eigenschaft in meiner pom.xml hinzugefügt
und Fehler war weg. Der Grund für den Fehler ist bereits in den obigen Beiträgen erläutert
quelle
Entfernen Sie @ Temporal-Annotationen, wenn Sie sie mit java.sql. * -Klassen verwenden.
quelle
Überprüfen Sie, ob Sie kein VPN haben. Ich hatte das gleiche Problem, erkannte aber die Datenbank, die ich mit der Fernbedienung verband!
quelle