Отключение создания контекстного объекта в виде метода createClob () - PullRequest
72 голосов
/ 04 января 2011

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

Исключение
Отключение создания контекстного большого объекта как createClob() ошибка метода метода: java.lang.reflect.InvocationTargetException

Информация
Версия Oracle: Oracle Database 10g Enterprise Edition, выпуск 10.2.0.4.0 Драйвер JDBC: драйвер JDBC Oracle, версия: 11.1.0.7.0

Ответы [ 14 ]

62 голосов
/ 04 января 2011

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

hibernate.temp.use_jdbc_metadata_defaults false
59 голосов
/ 28 февраля 2017

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

Для весеннего применения:

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

Обычный JPA:

hibernate.temp.use_jdbc_metadata_defaults=false
24 голосов
/ 04 января 2011

Просмотр комментариев в источнике :

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

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

22 голосов
/ 09 апреля 2014

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

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>
21 голосов
/ 05 февраля 2018

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

Для 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
12 голосов
/ 15 декабря 2015

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

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

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

6 голосов
/ 08 июня 2018

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

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
4 голосов
/ 14 февраля 2018

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

hibernate.temp.use_jdbc_metadata_defaults: false

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

select currval('"user"_id_seq');

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

4 голосов
/ 04 апреля 2014

Обновление драйвера JDBC до последней версии устранило неприятное сообщение об ошибке.

Вы можете скачать его здесь:

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

Требуется бесплатная регистрация.

1 голос
/ 22 мая 2019

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

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

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

...