Flyway ou geração automática com Hibernate?

Bom dia, gostaria de saber a opinião de vocês sobre o uso de tecnologias como o Flyway, eu até agora tenho gerado meus banco com o recurso de geração automático do Hibernate, qual seria a vantagem de um e do outro? não é mais produtivo usar o Hibernate?

Depende de quem vai fazer, se a pessoa vai ser mais produtiva com X ou Y.

Flyway nunca ouvi falar. Eu por exemplo não sou produtivo com Hibernate e modelagem orientada a objetos, por achar pouco flexível. Sempre foi tranquilo pra mim criar tabelas diretamente no banco, a cada nova demanda que for priorizada. Então essa de produtividade vai de cada um ou de cada cenário.

Mesmo usando o Hibernate, recomendo utilizar o Flyway (ou qualquer outra ferramenta voltada para evoluçao de banco de dados).

A criaçao de tabelas automáticas do hibernate facilita muito desenvolvimento, especialmente se você nao precisar de dados pré-existentes no seu sistema. Você pode mudar suas entidades livremente e o banco está sempre atualizado.

Quando você tem dados em produçao, nao dá pra simplesmente dar drop e create nas tabelas, daí você precisa ter mais controle sobre as migraçoes que acontecem no banco de dados.

Imagine que você renomeou um atributo numa classe. O hibernate vai apagar a coluna antiga e criar uma nova vazia? O que acontecem com dados que estavam lá?
No Flyway é sua responsabilidade criar a migraçao que, provavelmente, vai criar uma nova coluna, atualizar com o valor da nova e apagar a coluna antiga (ou simplesmente renomear, se o banco suportar).

Meu setup favorito nessa situaçao é ter o Hibernate criando o esquema automaticamente, quando em desenvolvimento, mas em outros ambientes (staging, produçao) ter o Flyway controlando as migraçoes e o Hibernate apenas validando se o esquema esttá correto.

1 curtida

Entendi, eu estou pensando em fazer desta forma também, usar o Hibernate para comunicar com banco mas gerar tudo pelo Flyway. Como você faz essa parte de gerar com o Hibernate em desenvolvimento e em produção usar o flyway? vc pega todos os scripts do banco gerados com o Hibernate e passa para a configuração do flayway?

Geralmente sim. Para novas tabelas geralmente eu copio o DDL, aplico qualquer convençao necessária e coloco como migraçao no Flyway. Se as migraçoes sao mais complexas prefiro escrever manualmente mesmo (como no exemplo de renomear campos, etc).

Aliás, só pra deixar claro, eu evito usar HIbernate em novos projetos quando tenho escolha. Mas isso é outra discussao.

Assim entendi, sua resposta me deu outra visão sobre este tema, muito obrigado.

Em, não sei se posso fugir do tema do tópico, mas fiquei curioso, vc pega o DDL gerado pelo Hibernate fazendo engenharia reversa no banco? é que para pegar os scripts do banco já gerado só conheço o powerdesigner que usa engenharia reversa.

aqui tem um projeto que usar Flyway -> https://github.com/Daniel-Dos/mailer