Hibernate.hbm2ddl.auto

Gente comecei a estudar hibernate com jpa, mas em nenhum material que estudei até aqui explicou de forma que desse pra eu entender bem os valores dessa propriedade não sei qual usar para o value. Parece que tem essas opçoes aqui: update, create, create-drop Qual usar em face de desenvolvimento e em produçao?
Grato…

[quote=caiomacedor]Gente comecei a estudar hibernate com jpa, mas em nenhum material que estudei até aqui explicou de forma que desse pra eu entender bem os valores dessa propriedade não sei qual usar para o value. Parece que tem essas opçoes aqui: update, create, create-drop Qual usar em face de desenvolvimento e em produçao?
Grato…[/quote]

Em produção não se deve usar nenhum, porque a responsabilidade de alterar o banco de dados é do DBA e não do programador.

Update -> faz as alterações no banco do tipo, criar novas colunas ou tabelas. Também altera as propriedades das colunas. Isso acontece quando você modifica o mapeamento, no caso as anotações. Se as tabelas ainda não existem no banco ele cria no primeiro acesso.

Create -> é arriscado usar porque ele exclui tudo e depois cria de novo. Então até para testes, você pode perder toda a sua base usando ele. Use no máximo na primeira vez que rodar o hibernate, depois modifique a configuração.

1 curtida

[quote=romarcio][quote=caiomacedor]Gente comecei a estudar hibernate com jpa, mas em nenhum material que estudei até aqui explicou de forma que desse pra eu entender bem os valores dessa propriedade não sei qual usar para o value. Parece que tem essas opçoes aqui: update, create, create-drop Qual usar em face de desenvolvimento e em produçao?
Grato…[/quote]

Em produção não se deve usar nenhum, porque a responsabilidade de alterar o banco de dados é do DBA e não do programador.

Update -> faz as alterações no banco do tipo, criar novas colunas ou tabelas. Também altera as propriedades das colunas. Isso acontece quando você modifica o mapeamento, no caso as anotações. Se as tabelas ainda não existem no banco ele cria no primeiro acesso.

Create -> é arriscado usar porque ele exclui tudo e depois cria de novo. Então até para testes, você pode perder toda a sua base usando ele. Use no máximo na primeira vez que rodar o hibernate, depois modifique a configuração.[/quote]Só uma observação.

Em produção pode-se usar o “validate”. O validate irá validar o schema do banco de dados com as entidades. Se algo estiver errado, uma exception será lançada de cara. [=

E para falar a verdade, eu até indico o validade para evitar achar que subiu uma aplicação sem erro e depois ver um belo stacktrace no log. [=

1 curtida

Nuca usei o validade. Mas vou aproveitar essa dica.

[quote=romarcio]Nuca usei o validade. Mas vou aproveitar essa dica.[/quote]Descobri a algum tempo atrás e desde então sempre uso esse cara.

É muito útil pois ele não modifica nada, apenas grita se encontrar algum erro. Algum campo mapeado errado ou coisa do tipo. =D

‘validate’ em produção também pode lançar exceções mesmo quando tudo está OK. Já tive vários erros com campos boolean, Oracle não tem boolean, MySQL tem alguns tipo que funcionam como boolean, PostgreSQL tem boolean, etc. Nesses casos várias vezes o hibernate vai dar pau e vc terá que por o mappedName="BIT’, por exemplo, para funcionar, o que tira um pouco da portabilidade dele. Também já tive problemas com validate e VIEWS, campos BLOB, etc.

Outro ponto é que quando usamos o ‘update’, caso um campo(coluna) não exista mais na entidade ele NÃO deletar a coluna da tabela, se adicionar uma coluna ‘not null’ e existir algum registro na tabela ela NÃO atualizada.

Então pra mim o ideal mesmo é fazer o MER do banco certinho sem usar muito essa ‘facilidade’.

1 curtida

[quote=lsjunior]‘validate’ em produção também pode lançar exceções mesmo quando tudo está OK. Já tive vários erros com campos boolean, Oracle não tem boolean, MySQL tem alguns tipo que funcionam como boolean, PostgreSQL tem boolean, etc. Nesses casos várias vezes o hibernate vai dar pau e vc terá que por o mappedName="BIT’, por exemplo, para funcionar, o que tira um pouco da portabilidade dele. Também já tive problemas com validate e VIEWS, campos BLOB, etc.

Outro ponto é que quando usamos o ‘update’, caso um campo(coluna) não exista mais na entidade ele NÃO deletar a coluna da tabela, se adicionar uma coluna ‘not null’ e existir algum registro na tabela ela NÃO atualizada.

Então pra mim o ideal mesmo é fazer o MER do banco certinho sem usar muito essa ‘facilidade’.[/quote]Bom saber. Nunca tive esse tipo de problema, vou ficar atento. [=

OBS.: Será que não é a versão do hibernate ou do driver utilizado que está lançando essas exceções não?

1 curtida