Я использую Hibernate 3.5.6 с Oracle 10g. Во время инициализации я вижу исключение ниже, но само приложение работает нормально. В чем причина этого исключения? и как это можно исправить?
Исключение
Отключение контекстного создания LOB, поскольку createClob()
метод вызвал ошибку:java.lang.reflect.InvocationTargetException
Информация
Версия Oracle: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 Драйвер JDBC: Драйвер Oracle JDBC, версия: 11.1.0.7.0
Ответы:
Отключите это предупреждение, добавив свойство ниже.
Для приложения Spring:
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
Нормальный JPA:
hibernate.temp.use_jdbc_metadata_defaults=false
источник
Как вы заметили, это исключение не является реальной проблемой. Это происходит во время загрузки, когда Hibernate пытается получить некоторую метаинформацию из базы данных. Если это вас раздражает, вы можете отключить его:
hibernate.temp.use_jdbc_metadata_defaults false
источник
useJdbcMetadata
дляfalse
предотвращает ,metaReportsDDLCausesTxnCommit
чтобы установить , и он остаетсяfalse
! grepcode.com/file/repo1.maven.org/maven2/org.hibernate/…Глядя на комментарии в источнике :
Итак, он пытается определить, может ли он использовать какие-то новые методы JDBC 4. Думаю, ваш драйвер может не поддерживать новый метод создания больших объектов.
источник
Driver does not support LOB feature
илиDatabase does not support LOB feature
?Чтобы скрыть исключение:
Для Hibernate 5.2 (и Spring Boot 2.0) вы можете использовать свойство use_jdbc_metadata_defaults , на которое указали другие:
# Meant to hide HHH000424: Disabling contextual LOB creation as createClob() method threw error spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
Или, если вы хотите, чтобы у вас не было никаких побочных эффектов от вышеуказанного параметра (есть комментарий, предупреждающий нас о некоторых побочных эффектах Oracle, я не знаю, действителен он или нет), вы можете просто отключить ведение журнала исключения, подобного этому :
logging: level: # Hides HHH000424: Disabling contextual LOB creation as createClob() method threw error org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl: WARN
источник
Чтобы избавиться от исключения
INFO - HHH000424: Disabling contextual LOB creation as createClob() method threw error :java.lang.reflect.InvocationTargetException
В
hibernate.cfg.xml
файле Добавить ниже свойство<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
источник
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" />
вpersistence.xml
файл, и это решило проблему для меня. Я использую JPA с Hibernate.Обновите это для использования Hibernate 4.3.x / 5.0.x - вы можете просто установить для этого свойства значение true:
<prop key="hibernate.jdbc.lob.non_contextual_creation">true</prop>
чтобы избавиться от этого сообщения об ошибке. Тот же эффект, но без детали "брошенное исключение". Подробности см. В источнике LobCreatorBuilder.
источник
Просто добавьте строку ниже в application.properties
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
источник
Как упоминалось в других комментариях, используя
hibernate.temp.use_jdbc_metadata_defaults = false
... исправит раздражающее сообщение, но может привести ко многим другим неожиданным проблемам. Лучшее решение - просто отключить создание контекстного LOB следующим образом:
hibernate.jdbc.lob.non_contextual_creation = true
Это заставит Hibernate (в моем случае это 5.3.10.Final) пропустить проверку драйвера JDBC и просто вывести следующее сообщение:
HHH000421: Disabling contextual LOB creation as hibernate.jdbc.lob.non_contextual_creation is true
Пока похоже, что эта настройка не вызывает никаких проблем.
источник
Обновление драйвера JDBC до последней версии удалило неприятное сообщение об ошибке.
Вы можете скачать его отсюда:
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
Однако требуется бесплатная регистрация.
источник
Если вы установите:
hibernate.temp.use_jdbc_metadata_defaults: false
это может вызвать проблемы с PostgreSQL, если имя вашей таблицы содержит зарезервированное слово, например user. После вставки он попытается найти последовательность идентификаторов с помощью:
select currval('"user"_id_seq');
который, очевидно, потерпит неудачу. По крайней мере, с Hibernate 5.2.13 и Spring Boot 2.0.0.RC1. Не нашли другого способа предотвратить это сообщение, так что теперь просто игнорируйте его.
источник
При работе с Spring boot 2.1.x это предупреждающее сообщение появляется при запуске приложения.
Как указано здесь, возможно, эта проблема не проявлялась в более ранних версиях, потому что связанное свойство было установлено в true по умолчанию, а теперь оно false:
https://github.com/spring-projects/spring-boot/issues/12007
Следовательно, решить эту проблему так же просто, как добавить следующее свойство в файл spring application.property.
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation = true
источник
Проблема возникает из-за того, что вы не выбрали соответствующий JDBC. Просто скачайте и используйте JDBC для Oracle 10g, а не 11g.
источник
Я использую hibernate 5.3.17, и он отлично работает, добавляя заданные свойства
hibernate.default_entity_mode=dynamic-map hibernate.temp.use_jdbc_metadata_defaults=true hibernate.jdbc.lob.non_contextual_creation = true
Благодарность
источник
Я столкнулся с этой ошибкой, когда мое веб-приложение было запущено в Linux пользователем, вошедшим в систему с недостаточными правами доступа. Эта ошибка
обычно предшествуют другие ошибки / исключения, особенно с вашего сервера приложений, т.е. для Tomcat:
или
Решение:
Остановите текущий экземпляр вашего веб-приложения.
Войдите в систему с суперпользователем или теми, у кого есть достаточные права доступа, т.е. root
Перезапустите веб-приложение или снова вызовите предыдущую функцию.
источник
Для тех, кто сталкивается с этой проблемой с Spring Boot 2
по умолчанию весенняя загрузка использовала версию hibernate 5.3.x, я добавил следующее свойство в свой pom.xml
<hibernate.version>5.4.2.Final</hibernate.version>
и ошибка исчезла. Причина ошибки уже объяснена в сообщениях выше
источник
Удалите аннотации @Temporal, если вы используете их с классами java.sql. *.
источник
Проверьте, не используете ли вы VPN. У меня была такая же проблема, но я понял, что db подключался к удаленному!
источник