Estou usando o Hibernate 3.5.6 com Oracle 10g. Estou vendo a exceção abaixo durante a inicialização, mas o próprio aplicativo está funcionando bem. Qual é a causa desta exceção? e como isso pode ser corrigido?
Exceção
Desativar a criação de LOB contextual como createClob()
método gerou erro:java.lang.reflect.InvocationTargetException
Info
Oracle version: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 Driver JDBC: Driver Oracle JDBC, versão: 11.1.0.7.0
Respostas:
Desative este aviso adicionando a propriedade abaixo.
Para aplicação Spring:
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
JPA normal:
hibernate.temp.use_jdbc_metadata_defaults=false
fonte
Como você notou, essa exceção não é um problema real. Acontece durante a inicialização, quando o Hibernate tenta recuperar alguma meta informação do banco de dados. Se isso incomoda você, você pode desativá-lo:
hibernate.temp.use_jdbc_metadata_defaults false
fonte
useJdbcMetadata
parafalse
previnemetaReportsDDLCausesTxnCommit
de ser configurado e ele permanecefalse
! grepcode.com/file/repo1.maven.org/maven2/org.hibernate/…Olhando para os comentários na fonte :
Portanto, ele está tentando determinar se pode usar alguns novos métodos JDBC 4. Eu acho que seu driver pode não suportar o novo método de criação de LOB.
fonte
Driver does not support LOB feature
ouDatabase does not support LOB feature
?Para ocultar a exceção:
Para Hibernate 5.2 (e Spring Boot 2.0), você pode usar a propriedade use_jdbc_metadata_defaults que os outros apontaram:
# Meant to hide HHH000424: Disabling contextual LOB creation as createClob() method threw error spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
Ou, se você quiser não ter nenhum efeito colateral da configuração acima (há um comentário nos avisando sobre alguns efeitos colaterais do Oracle, eu não sei se é válido ou não), você pode simplesmente desativar o registro da exceção assim :
logging: level: # Hides HHH000424: Disabling contextual LOB creation as createClob() method threw error org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl: WARN
fonte
Para se livrar da exceção
INFO - HHH000424: Disabling contextual LOB creation as createClob() method threw error :java.lang.reflect.InvocationTargetException
No
hibernate.cfg.xml
arquivo Adicionar propriedade abaixo<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
fonte
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" />
aopersistence.xml
arquivo e ele resolveu o problema para mim. Eu uso JPA com Hibernate.Atualize para usar o Hibernate 4.3.x / 5.0.x - você pode apenas definir esta propriedade como verdadeira:
<prop key="hibernate.jdbc.lob.non_contextual_creation">true</prop>
para se livrar dessa mensagem de erro. Mesmo efeito, mas sem o detalhe "lançou exceção". Consulte a fonte LobCreatorBuilder para obter detalhes.
fonte
Basta adicionar a linha abaixo em application.properties
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
fonte
Conforme mencionado em outros comentários usando
hibernate.temp.use_jdbc_metadata_defaults = false
... vai consertar a mensagem chata, mas pode levar a muitos outros problemas surpreendentes. A melhor solução é simplesmente desativar a criação de LOB contextual com isto:
hibernate.jdbc.lob.non_contextual_creation = true
Isso fará com que o Hibernate (no meu caso, seu 5.3.10.Final) pule a análise do driver JDBC e apenas exiba a seguinte mensagem:
HHH000421: Disabling contextual LOB creation as hibernate.jdbc.lob.non_contextual_creation is true
Até agora, parece que essa configuração não causa problemas.
fonte
Atualizar o driver JDBC para a versão mais recente removeu a mensagem de erro desagradável.
Você pode baixá-lo aqui:
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
No entanto, é necessário registro gratuito.
fonte
Se você definir:
hibernate.temp.use_jdbc_metadata_defaults: false
pode causar problemas com o PostgreSQL quando o nome da tabela contém uma palavra reservada como usuário. Após a inserção, ele tentará encontrar a sequência de id com:
select currval('"user"_id_seq');
que obviamente irá falhar. Isso pelo menos com Hibernate 5.2.13 e Spring Boot 2.0.0.RC1. Não encontrei outra maneira de evitar esta mensagem, então agora apenas a ignore.
fonte
Ao trabalhar com o Spring boot 2.1.x, esta mensagem de aviso aparece ao iniciar o aplicativo.
Conforme indicado aqui, talvez esse problema não tenha aparecido nas versões anteriores porque a propriedade relacionada foi definida como verdadeira por padrão e agora é falsa:
https://github.com/spring-projects/spring-boot/issues/12007
Consequentemente, resolver isso é tão simples quanto adicionar a seguinte propriedade ao arquivo spring application.property.
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation = true
fonte
O problema ocorre porque você não escolheu o JDBC apropriado. Basta fazer o download e usar o JDBC para oracle 10g ao invés do 11g.
fonte
Estou usando o hibernate 5.3.17 e funciona bem adicionando determinadas propriedades
hibernate.default_entity_mode=dynamic-map hibernate.temp.use_jdbc_metadata_defaults=true hibernate.jdbc.lob.non_contextual_creation = true
obrigado
fonte
Eu encontrei este erro quando meu aplicativo da web foi iniciado no Linux por um usuário conectado com direitos de acesso insuficientes. Esse erro
geralmente precedido por outros erros / exceções, especialmente do seu servidor de aplicativos, por exemplo, para Tomcat:
ou
Solução:
Pare a instância atual de seus aplicativos da web.
Faça login com superusuário ou aqueles com direitos de acesso suficientes, ou seja, root
Reinicie seu aplicativo da web ou chame a função anterior novamente.
fonte
Para quem está enfrentando esse problema com Spring Boot 2
por padrão, o Spring Boot estava usando a versão 5.3.x do hibernate, adicionei a seguinte propriedade em meu pom.xml
<hibernate.version>5.4.2.Final</hibernate.version>
e o erro desapareceu. O motivo do erro já é explicado nas postagens acima
fonte
Remova as anotações @Temporal se usá-las com classes java.sql. *.
fonte
Verifique se você não está em uma VPN. Eu tive o mesmo problema mas percebi que o db estava conectando ao remoto!
fonte