java - poner - Desactivar la creación de LOB contextual como método createClob() arrojó un error
setbounds java (13)
Actualice esto para usar Hibernate 4.3.x / 5.0.x; puede establecer esta propiedad en verdadero:
<prop key="hibernate.jdbc.lob.non_contextual_creation">true</prop>
para deshacerse de ese mensaje de error. Mismo efecto pero sin el detalle de "lanzar la excepción". Ver fuente de LobCreatorBuilder para más detalles.
Estoy usando Hibernate 3.5.6 con Oracle 10g. Estoy viendo la excepción a continuación durante la inicialización, pero la aplicación en sí está funcionando bien. ¿Cuál es la causa de esta excepción? y cómo puede ser corregido?
Excepción
Desactivando la creación de LOB contextual como método createClob()
arrojó el error: java.lang.reflect.InvocationTargetException
Información
Versión de Oracle: Oracle Database 10g Enterprise Edition Versión 10.2.0.4.0 Controlador JDBC: Controlador Oracle JDBC, versión: 11.1.0.7.0
Como habrás notado, esta excepción no es un problema real. Ocurre durante el arranque, cuando Hibernate intenta recuperar algo de metainformación de la base de datos. Si esto te molesta, puedes deshabilitarlo:
hibernate.temp.use_jdbc_metadata_defaults false
Desactive esta advertencia agregando la propiedad a continuación.
Para la aplicación de primavera:
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
JPA normal:
hibernate.temp.use_jdbc_metadata_defaults=false
El problema ocurre debido a que no eligió el JDBC apropiado. Simplemente descargue y use el JDBC para Oracle 10g en vez de 11g.
Hola nombre de propiedad = "hibernate.temp.use_jdbc_metadata_defaults" cambiando a falso simplemente no mostró error. No resuelve el error. Simplemente oculta el error.
Para resolver el error intenté actualizar Spring Hibernate y la versión del conector mysql, pero no sirve de nada. Luego verifiqué la clase ''com.mysql.jdbc.Driver'' donde indica compatibilidad hacia atrás para admitir aplicaciones que llaman a Class.forName("com.mysql.jdbc.Driver");
. Cargando la clase 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 ''Luego cambié'' hibernate.connection.driver_class ''a'' com.mysql.cj.jdbc.Driver ''y se resuelve el error.
summary => use ''com.mysql.cj.jdbc.Driver'' en lugar de `com.mysql.jdbc.Driver '' en la propiedad '' hibernate.connection.driver_class '' .
La actualización del controlador JDBC a la última versión eliminó el desagradable mensaje de error.
Puedes descargarlo desde aquí:
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
Se requiere registro gratuito sin embargo.
Mirando los comentarios en la source :
Básicamente, aquí simplemente estamos comprobando si podemos llamar a los métodos java.sql.Connection para la creación de LOB agregada en JDBC 4. No solo verificamos si java.sql.Connection declara estos métodos, sino también si el java.sql.Connection real la instancia los implementa (es decir, puede invocarse sin simplemente lanzar una excepción).
Entonces, está tratando de determinar si puede usar algunos métodos nuevos de JDBC 4. Supongo que su controlador puede no ser compatible con el nuevo método de creación de LOB.
Para deshacerse de la excepción
INFO - HHH000424: Disabling contextual LOB creation as createClob() method threw error :java.lang.reflect.InvocationTargetException
En el archivo hibernate.cfg.xml
, agregue la propiedad siguiente
<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
Para ocultar la excepción:
Para Hibernate 5.2 (y Spring Boot 2.0), puede usar la propiedad use_jdbc_metadata_defaults que los otros señalaron:
# Meant to hide HHH000424: Disabling contextual LOB creation as createClob() method threw error
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
O bien, si no desea tener efectos secundarios con la configuración anterior (hay un comentario que nos advierte sobre algunos efectos secundarios de Oracle, no sé si es válido o no), puede desactivar el registro de la excepción como este :
logging:
level:
# Hides HHH000424: Disabling contextual LOB creation as createClob() method threw error
org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl: WARN
Quite las anotaciones @Temporal si las usa con las clases java.sql. *.
Si configuraste:
hibernate.temp.use_jdbc_metadata_defaults: false
puede causar problemas con PostgreSQL cuando el nombre de la tabla contiene palabra reservada como usuario. Después de insertar, intentará encontrar la secuencia de identificación con:
select currval(''"user"_id_seq'');
que obviamente fallará Esto al menos con Hibernate 5.2.13 y Spring Boot 2.0.0.RC1. No he encontrado otra forma de evitar este mensaje, así que ahora simplemente ignórelo.
Simplemente agregue la línea siguiente en application.properties
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
Verifica si no estás en una VPN. Tuve el mismo problema pero me di cuenta de que el db me estaba conectando a control remoto.