Pergunta

Estamos usando hibernate entitymanager para mapear as nossas entidades através de JPA. E nós estamos usando HSQLDB banco de dados in-memory para testes de unidade. Tudo estava bem até que um refactor recente para o modelo começou a causar o seguinte erro:

17:55:48.516 [main] WARN  o.h.util.JDBCExceptionReporter - SQL Error: -22, SQLState: S0002
17:55:48.517 [main] ERROR o.h.util.JDBCExceptionReporter - Table not found in statement

Eu não posso postar o SQL em questão, mas alguém pode me dar indicações quanto às possíveis causas do erro acima? especialmente desde que eu sei que o código estava trabalhando antes. Parece que hibernação está gerando sqls inválidos por causa da refatorar?

Foi útil?

Solução

Bem, é a tabela realmente lá? Ativar a saída SQL para Hibernate e verificá-lo contra o esquema de banco de dados real.

Seu refatoração pode ter sido mal sucedido (entidade e mesa foram renomeados; consulta nomeada não foi atualizado).

Ou você pode ter uma classe mais velha (es) em algum lugar no classpath causando anotações erradas para ser lido.

Outras dicas

Isto também pode indicar uma incompatibilidade entre o driver JDBC eo dialeto Hibernate.

Conseguimos este quando a conexão JDBC driver foi HSQLDB eo dialeto Hibernate foi org.hibernate.dialect.Oracle10gDialect.

A mensagem de exceção correspondentes: [ERROR]: não foi possível obter metadados de banco de dados java.sql.SQLException: Tabela não encontrada na declaração [escolha sequence_name de all_sequences]

Eu tive esse problema também, no meu caso eu tive algo parecido com isso na entidade

@Column (name = "AVAIL_TARGET_PERCENT", ColumnDefinition = "número (5,2)", anulável = false)

Apenas evitar o ColumnDefinition (tirá-lo!) E você deve ser fino. Eu fiz isso, e que o problema foi corrigido

Nós também estavam recebendo a mesma exceção. Acontece que a propriedade hibernate.dialect foi definido como org.hibernate.dialect.Oracle10gDialect com base de dados H2 servindo como uma fonte de dados. A solução é remover hibernate.dialect e não usar qualquer valor. Hibernate tem a capacidade de detectar automaticamente dialeto metadados com base recuperados a partir de fonte de dados de configuração
Para mais informações sobre como o Hibernate detecta automaticamente dialeto
https://docs.jboss.org/hibernate /orm/3.6/reference/en-US/html/portability.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top