program story

createClob () 메서드로 인해 컨텍스트 LOB 생성을 비활성화하면 오류가 발생했습니다.

inputbox 2020. 10. 11. 10:32
반응형

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


아래에 속성을 추가하여이 경고를 비활성화하십시오.

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

소스 의 주석을 살펴보면 :

기본적으로 여기서는 JDBC 4에 추가 된 LOB 생성을 위해 java.sql.Connection 메소드를 호출 할 수 있는지 확인하고 있습니다. java.sql.Connection이 이러한 메소드를 선언하는지 여부뿐만 아니라 실제 java.sql.Connection이 있는지 여부도 확인합니다. 인스턴스가이를 구현합니다 (예 : 단순히 예외를 던지지 않고 호출 될 수 있음).

그래서 새로운 JDBC 4 메소드를 사용할 수 있는지 확인하려고합니다. 드라이버가 새로운 LOB 생성 방법을 지원하지 않을 수 있습니다.


예외를 제거하려면

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>

예외를 숨기려면 :

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

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

JDBC 드라이버를 최신 버전으로 업데이트하면 불쾌한 오류 메시지가 제거되었습니다.

여기에서 다운로드 할 수 있습니다.

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

하지만 무료 등록이 필요합니다.


설정하는 경우 :

hibernate.temp.use_jdbc_metadata_defaults: false

테이블 이름에 user와 같은 예약어가 포함되어 있으면 PostgreSQL에 문제가 발생할 수 있습니다. 삽입 후 다음을 사용하여 ID 시퀀스를 찾으려고 시도합니다.

select currval('"user"_id_seq');

분명히 실패 할 것입니다. 이것은 적어도 Hibernate 5.2.13 및 Spring Boot 2.0.0.RC1에서. 이 메시지를 방지하는 다른 방법을 찾지 못 했으므로 이제 무시하십시오.


적절한 JDBC를 선택하지 않았기 때문에 문제가 발생합니다. 11g가 아닌 Oracle 10g 용 JDBC를 다운로드하여 사용하십시오.


다른 의견에서 언급했듯이

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

지금까지는이 설정이 문제를 일으키지 않는 것 같습니다.


I hit this error when my web app was started in Linux by user logged in with insufficient access rights. This error

org.hibernate.engine.jdbc.internal.LobCreatorBuilder - HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException

usually preceded by other errors / exceptions, especially from your application server i.e for Tomcat:

org.apache.catalina.LifecycleException: Failed to initialize component ...

or

java.lang.UnsatisfiedLinkError: ... cannot open shared object file: No such file or directory

Solution:

  1. Stop your web apps current instance.

  2. Login with super user or those with sufficient access rights i.e root

  3. Restart your web app or call previous function again.


For anyone who is facing this problem with Spring Boot 2

by default spring boot was using hibernate 5.3.x version, I have added following property in my pom.xml

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

and error was gone. Reason for error is already explained in posts above


Remove @Temporal annotations if you use it with java.sql.* classes.


Check if you are not on a VPN. I had the same issue but realized the db I was connecting to remote!

참고URL : https://stackoverflow.com/questions/4588755/disabling-contextual-lob-creation-as-createclob-method-threw-error

반응형