Pergunta

Depois de ler Hibernate:? Hbm2ddl.auto = update na produção algumas questões foram suscitadas . Primeiro de tudo, a razão para eu estou usando Hibernate é ser fornecedor independente de banco de dados (não há necessidade de escrever 10 versões do "mesmo" consulta SQL, por exemplo. Tsql vs. sql).

Meu problema aparece quando é hora de criar o banco de dados esquemas (ambiente de produção). Tanto quanto eu posso ver Eu tenho duas alternativas.

  1. hbm2dll = update
  2. puro SQL (DDL) scripts.

A primeira alternativa é amplamente discutido na linha acima. A segunda alternativa é ruim, porque isso significa que eu estou de volta ao meu primeiro problema: "Não quero criar instruções SQL que são base de dados dependente do fornecedor". (Esta declaração pode ser falsa, se "todos" (atlast a bancos de dados de suporte Hibernate) estão a implementar o DDL (o subconjunto de SQL utilizados para definir e analisar a estrutura de um banco de dados.) igual).

Foi útil?

Solução

Faça todas as alterações no desenvolvimento / mode e transferência estadiamento e executar scripts na produção manualmente (ou automaticamente, mas não deixe de hibernação executá-los). Os scripts podem precisar de alguma tunning desde a última atualização hbm2ddl não cobre todos os casos.

Na verdade eu nunca deixá-ddl prazo de hibernação contra qualquer banco de dados. Eu uso hbm2ddl para gerar texto:

org.hibernate.tool.hbm2ddl.SchemaExport --config=hibernate.cfg.xml --text --format --delimiter=;

org.hibernate.tool.hbm2ddl.SchemaUpdate --config=hibernate.cfg.xml --text --format --delimiter=;

Outras dicas

ferramentas normalmente que despeja o esquema APP são baseados na ferramenta SchemaExport, onde se lê apenas os metadados estático.

Há um Maven / Gradle plug-in https://github.com/Devskiller/jpa2ddl que gera o esquema APP. Em inclui todas as propriedades, estratégias namings, tipos de usuários, etc.

Você também pode usá-lo para gerar migrações de esquema automatizados para Flyway .

Eu gosto de Hibernate (a LOT), e eu acho que isso faz algum código incrivelmente boa qualidade, mas eu não mais cedo iria transformá-lo solto em um banco de dados de produção do que eu ia deixar uma babá urso grizzly muito bem-educado. Tudo pode ir grande por um tempo, mas o incidente em que ele vai mal é realmente ruim.

A minha sugestão seria em um ambiente de teste, tem de hibernação gerar esquemas de banco de dados. Teste aqueles em um ambiente de teste. Em seguida, tomar esses scripts para o ambiente de produção e executá-los. Note-se a especificidade lá; mesmo se os testes bem sucedidos fantasticamente, eu ainda não apenas permitir que o Hibernate ir selvagem no servidor de produção. Tome a saída do Hibernate schemagen, testá-lo, e uma vez que é validado, em seguida, implantar isso para o servidor de produção.

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