web-dev-qa-db-ja.com

createClob()メソッドがエラーをスローしたため、コンテキストLOBの作成を無効にする

Oracle 10gでHibernate 3.5.6を使用しています。初期化中に以下の例外が表示されますが、アプリケーション自体は正常に動作しています。この例外の原因は何ですか?そしてそれをどのように修正できますか?

例外
コンテキストLOBの作成を無効にすると、createClob()メソッドがエラーをスローしました:Java.lang.reflect.InvocationTargetException

情報
Oracleバージョン:Oracle Database 10g Enterprise Editionリリース10.2.0.4.0 JDBCドライバー:Oracle JDBCドライバー、バージョン:11.1.0.7.0

76
GiriByaks

お気づきのように、この例外は実際の問題ではありません。 Hibernateがデータベースからメタ情報を取得しようとすると、ブート中に発生します。これが気になる場合は、無効にすることができます。

hibernate.temp.use_jdbc_metadata_defaults false
64
jpkrohling

以下のプロパティを追加して、この警告を無効にします。

Springアプリケーションの場合:

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

通常のJPA:

hibernate.temp.use_jdbc_metadata_defaults=false
63

source のコメントを見る:

基本的に、ここでは、JDBC 4で追加されたLOB作成用のJava.sql.Connectionメソッドを呼び出すことができるかどうかを確認しています。Java.sql.Connectionがこれらのメソッドを宣言するかどうかだけでなく、実際のJava.sql.Connectionインスタンスはそれらを実装します(つまり、単に例外をスローすることなく呼び出すことができます)。

そのため、新しいJDBC 4メソッドを使用できるかどうかを判断しようとしています。ドライバーが新しいLOB作成方法をサポートしていない可能性があります。

24
Steve K

例外を取り除くには

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>
22
pudaykiran

例外を非表示にするには:

Hibernate 5.2(およびSpring Boot 2.0)の場合、他の人が指摘したse_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
22
Vlad Dinulescu

Hibernate 4.3.x/5.0.xを使用するためにこれに更新します-このプロパティをtrueに設定するだけです:

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

そのエラーメッセージを取り除きます。同じ効果ですが、「例外をスロー」の詳細はありません。詳細については、LobCreatorBuilderソースを参照してください。

12
Torsten Krah

Application.propertiesに次の行を追加するだけです

spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
6
Rupesh Patil

設定した場合:

hibernate.temp.use_jdbc_metadata_defaults: false

テーブル名にユーザーのような予約語が含まれていると、PostgreSQLで問題が発生する可能性があります。挿入後、IDシーケンスを見つけようとします:

select currval('"user"_id_seq');

これは明らかに失敗します。これは、少なくともHibernate 5.2.13およびSpring Boot 2.0.0.RC1で発生します。このメッセージを防ぐ他の方法を見つけていないので、今は無視してください。

4
kettunen

JDBCドライバーを最新バージョンに更新すると、厄介なエラーメッセージが削除されました。

ここからダウンロードできます:

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

ただし、無料の登録が必要です。

4
Boris Brodski

を使用して他のコメントで述べたように

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

これまでのところ、この設定は問題を引き起こさないようです。

1
Jacek Prucia

問題は、適切なJDBCを選択しなかったために発生します。 11gではなくOracle 10g用のJDBCをダウンロードして使用します。

1
sami

不十分なアクセス権でログインしたユーザーがLinuxでWebアプリを起動したときに、このエラーが発生しました。このエラー

org.hibernate.engine.jdbc.internal.LobCreatorBuilder-HHH000424:createClob()メソッドがコンテキストLOBの作成を無効にするとエラーがスローされる:Java.lang.reflect.InvocationTargetException

通常、他のエラー/例外が先行します。特に、Tomcatの場合はアプリケーションサーバーからです。

org.Apache.catalina.LifecycleException:コンポーネントの初期化に失敗しました...

または

Java.lang.UnsatisfiedLinkError:...共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません

解決:

  1. Webアプリの現在のインスタンスを停止します。

  2. スーパーユーザーまたは十分なアクセス権(root)を持つユーザーでログインします

  3. Webアプリを再起動するか、以前の関数を再度呼び出します。

0
peterong