Tentei atualizar o modo de hibernação de 4 para 5 em meu projeto com a 4.2
versão de primavera . Após essa atualização, encontrei o seguinte erro em meu rastreamento de pilha quando chamei um método para atualização.
10:53:32,185 ERROR TableStructure:149 - could not read a hi value
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist
Eu mudei o Id incrementado automaticamente com anotação
@GeneratedValue(strategy=GenerationType.AUTO)
ainda assim o erro permanece.
Respostas:
Você também pode colocar:
E deixe o DateBase gerenciar a incrementação da chave primária:
fonte
INSERT
um vai causar uma viagem de ida e volta adicional ao banco de dados para buscar o ID. Então, quando essa desvantagem for aceitável, tudo bem.Você precisa definir para Hibernate5.x
<property name="hibernate.id.new_generator_mappings">false</property>
.. veja e link .Para versões anteriores do Hibernate 4.x:
<prop key="hibernate.id.new_generator_mappings">false</prop>
fonte
Trabalhando com Spring Boot
Solução
Coloque a string abaixo em .application.properties
Explicação
No Hibernate 4.X, esse atributo é padronizado como
true
.fonte
Esta é a razão por trás desse erro:
Ele procurará como o banco de dados que você está usando gera ids. Para MySql ou HSQSL, existem campos de incremento que incrementam automaticamente. No Postgres ou Oracle, eles usam tabelas de sequência. Como você não especificou um nome de tabela de sequência, ele irá procurar por uma tabela de sequência chamada hibernate_sequence e usá-la como padrão. Portanto, você provavelmente não tem essa tabela de sequência em seu banco de dados e agora obtém esse erro.
fonte
Eu estava recebendo o mesmo erro "com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Tabela 'mylocaldb.hibernate_sequence' não existe".
Usando spring mvc 4.3.7 e hibernate versão 5.2.9, a aplicação é feita usando a configuração baseada em Spring Java. Agora tenho que adicionar a
hibernate.id.new_generator_mappings
propriedade mencionada por @Eva Mariam em meu código assim:E funcionou como um encanto.
fonte
Para sua informação
Se você estiver usando arquivos hbm para definir o mapeamento O / R.
Notar que:
No Hibernate 5, o nome do parâmetro para o nome da sequência foi alterado .
A seguinte configuração funcionou bem no Hibernate 4 :
Mas no Hibernate 5 , o mesmo arquivo de configuração de mapeamento causará um erro "hibernate_sequence não existe".
Para corrigir esse erro, o nome do parâmetro deve mudar para:
Esse problema me custou 2, 3 horas.
E de alguma forma, parece que não há nenhum documento sobre isso.
Eu tenho que ler o código-fonte de org.hibernate.id.enhanced.SequenceStyleGenerator para descobrir
fonte
Quando você usa
@GeneratedValue(strategy=GenerationType.AUTO)
ou
@GeneratedValue
que é uma forma resumida do acima, o Hibernate começa a decidir a melhor estratégia de geração para você, neste caso ele selecionouGenerationType.SEQUENCE
como a estratégia e é por isso que está procurandoschemaName.hibernate_sequence
que é uma tabela, para geração de id baseada em sequência.Quando você usa
GenerationType.SEQUENCE
como estratégia, você precisa fornecer o@TableGenerator
seguinte.Quando você define a estratégia, ela é
@GeneratedValue(strategy = GenerationType.IDENTITY)
.o problema original é resolvido porque o Hibernate para de procurar a tabela de sequência.
fonte
No caso de alguém arrancar os cabelos com esse problema como eu fiz hoje, não pude resolver esse erro até que mudei
para
fonte
no hibernate 5.x, você deve adicionar set hibernate.id.new_generator_mappings para false em hibernate.cfg.xml
fonte
Você também pode colocar:
E deixe o DateBase gerenciar a incrementação da chave primária:
A resposta acima me ajudou.
fonte
Se você estiver usando a versão do Hibernate anterior ao Hibernate5
@GeneratedValue(strategy = GenerationType.IDENTITY)
funciona perfeitamente. Mas após o Hibernate5, a seguinte correção é necessária.DDL
RAZÃO
Trecho do hibernate-issue
fonte
Isso pode ser causado por HHH-10876, que foi corrigido, portanto, certifique-se de atualizar para:
fonte
Hibernate 5.2.17.Final
como uma implementação. Ainda estou tendo esse problema quandoGenerationType
éAUTO
.Eu adicionei a sequência do Hibernate no postgres. Execute esta consulta no Editor PostGres:
Vou descobrir os prós / contras de usar a consulta, mas para quem precisa de ajuda pode usar isso.
fonte
No meu caso, substituir todas as anotações
GenerationType.AUTO
porGenerationType.SEQUENCE
resolveu o problema.fonte
Execute esta consulta
fonte