Подтвердить что ты не робот

Отключение контекстного создания LOB как метода createClob() вызвало ошибку

Я использую Hibernate 3.5.6 с Oracle 10g. Во время инициализации я вижу исключение ниже, но сам приложение работает нормально. В чем причина этого исключения? и как его можно исправить?

Exception
Отключение контекстного создания LOB как метода createClob() вызвало ошибку: java.lang.reflect.InvocationTargetException

Info
Версия Oracle: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 Драйвер JDBC: драйвер Oracle JDBC, версия: 11.1.0.7.0

4b9b3361

Ответ 1

Отключите это предупреждение, добавив свойство ниже.

Для приложения Spring:

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

Нормальный JPA:

hibernate.temp.use_jdbc_metadata_defaults=false

Ответ 2

Как вы заметили, это исключение не является реальной проблемой. Это происходит во время загрузки, когда Hibernate пытается получить некоторую метаинформацию из базы данных. Если это вас раздражает, вы можете отключить его:

hibernate.temp.use_jdbc_metadata_defaults false

Ответ 3

Глядя на комментарии в источник:

В основном здесь мы просто проверяем можно ли назвать java.sql.Соединения для LOB создание добавлено в JDBC 4. Мы не только проверьте, есть ли соединение java.sql.Connection объявляет эти методы, но также действительно ли java.sql.Connection экземпляр реализует их (т.е. может быть не просто бросая исключение).

Итак, он пытается определить, может ли он использовать некоторые новые методы JDBC 4. Я думаю, ваш драйвер может не поддерживать новый метод создания LOB.

Ответ 4

Чтобы избавиться от исключения

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>

Ответ 5

Чтобы скрыть исключение:

Для 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

Ответ 6

Обновите это для использования Hibernate 4.3.x/5.0.x - вы можете просто установить для этого свойства значение true:

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

чтобы избавиться от этого сообщения об ошибке. Тот же эффект, но без детализации "бросил исключение". Подробнее см. В источнике LobCreatorBuilder.

Ответ 7

Просто добавьте строку ниже в application.properties.

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

Ответ 9

Если вы установили:

hibernate.temp.use_jdbc_metadata_defaults: false

это может вызвать проблемы с PostgreSQL, когда ваше имя таблицы содержит зарезервированное слово, подобное пользователю. После вставки он попытается найти последовательность идентификаторов с:

select currval('"user"_id_seq');

которые, очевидно, потерпят неудачу. Это по крайней мере с Hibernate 5.2.13 и Spring Boot 2.0.0.RC1. Не нашли другого способа предотвратить это сообщение, поэтому теперь просто игнорируем его.

Ответ 10

Проблема возникает из-за того, что вы не выбрали соответствующий JDBC. Просто загрузите и используйте JDBC для oracle 10g, а не 11g.

Ответ 11

Как уже упоминалось в других комментариях, используя

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

Пока что похоже, что этот параметр не вызывает никаких проблем.

Ответ 12

О, МОЙ БОГ! После многого, я получил решение этой проблемы. Я использую Hibernate-5 и postgress версии 10 и PGSimpleDataSource для источника данных. Нам нужно добавить свойства ниже в файл свойств hibernate.

Environment.NON_CONTEXTUAL_LOB_CREATION = "hibernate.jdbc.lob.non_contextual_creation" hibernateProp.put(Environment.NON_CONTEXTUAL_LOB_CREATION, true);

он решит все проблемы.

Ответ 13

Я столкнулся с этой ошибкой, когда мое веб-приложение было запущено в Linux пользователем, вошедшим в систему с недостаточными правами доступа. Эта ошибка

org.hibernate.engine.jdbc.internal.LobCreatorBuilder - HHH000424: Отключение создания контекстного большого объекта как метода createClob() вызвало ошибку: java.lang.reflect.InvocationTargetException

обычно предшествуют другие ошибки/исключения, особенно с вашего сервера приложений, например, для Tomcat:

org.apache.catalina.LifecycleException: не удалось инициализировать компонент...

или же

java.lang.UnsatisfiedLinkError:... не может открыть общий объектный файл: нет такого файла или каталога

Решение:

  1. Остановите текущий экземпляр вашего веб-приложения.

  2. Войдите в систему как суперпользователь или пользователи с достаточными правами доступа, например root

  3. Перезапустите веб-приложение или снова вызовите предыдущую функцию.

Ответ 14

Для тех, кто сталкивается с этой проблемой в Spring Boot 2

по умолчанию при весенней загрузке использовалась версия hibernate 5.3.x, я добавил следующее свойство в свой pom.xml

<hibernate.version>5.4.2.Final</hibernate.version>

и ошибка исчезла. Причина ошибки уже объяснена в постах выше

Ответ 15

Удалите @Temporal аннотации, если вы используете его с классами java.sql. *.

Ответ 16

Проверьте, нет ли у вас VPN. У меня была такая же проблема, но я понял, что db я подключался к удаленному!

Ответ 17

Hey имя свойства = "hibernate.temp.use_jdbc_metadata_defaults", изменяющееся на false, просто не отображает ошибку. Это не устраняет ошибку. Он просто скрывает ошибку.

Чтобы решить проблему, я попытался обновить версию спящего режима с гибернацией и mysql, но это бесполезно. Затем я проверил класс com.mysql.jdbc.Driver, в котором он указывает обратную совместимость для поддержки приложений, вызывающих Class.forName("com.mysql.jdbc.Driver"); , Загрузка класса com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver 'Затем я изменил "hibernate.connection.driver_class" на ошибку "com.mysql.cj.jdbc.Driver".

summary => используйте 'com.mysql.cj.jdbc.Driver' вместо 'com.mysql.jdbc.Driver' в свойстве 'hibernate.connection.driver_class'.