🚨 Erro com UUID + Spring Boot + JPA + Hibernate + import.sql
… por que ele acontece (e como resolver)
Não poderia deixar de compartilhar o erro que me fez perder algumas boas horas.
Se você já trabalhou com UUID, JPA/Hibernate e um arquivo import.sql no Spring Boot, provavelmente já encontrou este problema enigmático:
“EntityNotFoundException: Unable to find entity with UUID…” ou erros de FK que não fazem sentido.
Acredite... isso não é magia! Esse comportamento é totalmente esperado do Hibernate.
🔍 Por que isso acontece?
Tudo nasce da ordem de inicialização do Hibernate:
▪ O Hibernate só começa a gerar UUIDs automáticos depois que o contexto JPA está ativo.
▪ Antes disso, @GeneratedValue, UUIDGenerator ou qualquer geração automática ainda não funciona.
▪ E o import.sql roda antes de tudo isso.
Ou seja:
👉 O Hibernate ainda não consegue gerar UUIDs.
👉 Não consegue resolver foreign keys automaticamente.
👉 E você é obrigado a definir todos os UUIDs manualmente no import.sql.
E aí começam os problemas:
▪ UUIDs muito parecidos são convertidos pelo banco (principalmente MySQL)
▪ CHAR(36) pode gerar espaços ou inconsistências
▪ Foreign keys quebram porque o ID ainda não existe
▪ Entidades parecem 'sumir' por interpretação incorreta do UUID
É o tipo de bug que consome horas até finalmente entender o que está acontecendo.
🧪 O que eu tentei (e não funcionou)
1. Inserir UUIDs manualmente no import.sql
Funcionou parcialmente, mas ficou difícil de manter.
Com várias entidades relacionadas, o Hibernate se perdia e o banco fazia conversões inesperadas.
2. Migrar para schema.sql + data.sql
A ideia era que o Spring resolvesse a ordem de execução.
Mas os problemas com UUID continuaram exatamente iguais.
3. A solução final: ApplicationRunner + SeedData
Depois de muitos testes, a abordagem mais estável foi:
▪ Criar uma classe SeedData
▪ Usar @Component
▪ Carregar dados via ApplicationRunner
Com isso:
▪ O Spring já está totalmente inicializado
▪ O Hibernate já consegue gerar UUIDs corretamente
▪ Todas as relações e FKs funcionam como esperado
▪ Zero inconsistências de conversão
O código ficou muito mais limpo, previsível e fácil de manter.
🎯 Conclusão
O comportamento não é bug — é ordem de execução do Hibernate:
▪ UUIDs automáticos não existem antes da JPA inicializar
▪ import.sql roda antes disso
▪ Resultado: necessidade de UUID manual (e dor de cabeça)
A solução mais estável foi:
👉 Usar ApplicationRunner com Hibernate já inicializado
Sem gambiarra. Sem UUID quebrado. Sem FK fantasma.
Gostou do conteúdo?
Explore mais artigos ou volte para o portfólio.


