Question

Après avoir lu Hibernate: hbm2ddl.auto = mise à jour en production? , des questions se posent. . Tout d’abord, j’utilise Hibernate pour être indépendant du fournisseur de base de données (inutile d’écrire 10 versions de la même requête sql, par exemple tsql ou sql).

Mon problème apparaît lorsqu'il est temps de créer les schémas de base de données (environnement de production). Autant que je sache, j'ai deux alternatives.

  1. hbm2dll = update
  2. scripts SQL pur (ddl).

La première alternative est largement discutée dans le fil de discussion ci-dessus. La seconde alternative est mauvaise car cela signifie que je suis revenu à mon premier problème: "Ne souhaite pas créer d'instructions SQL qui dépendent du fournisseur de base de données". (Cette affirmation peut être fausse si "tout" (à l'aide des bases de données supportées par Hibernate) implémente le DDL (Le sous-ensemble de SQL utilisé pour définir et examiner la structure d'une base de données.) est égal).

Était-ce utile?

La solution

Effectuez toutes les modifications en mode développement / intermédiaire, puis transférez et exécutez les scripts en production manuellement (ou automatiquement, mais ne laissez pas hibernate les exécuter). Les scripts peuvent nécessiter quelques ajustements car la mise à jour de hbm2ddl ne couvre pas tous les cas.

En fait, je ne laisse jamais hibernate exécuter ddl sur aucune base de données. J'utilise hbm2ddl pour générer du texte:

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

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

Autres conseils

Normalement, les outils qui extraient le schéma JPA sont basés sur l'outil SchemaExport , qui lit uniquement les métadonnées statiques.

Il existe un plugin Maven / Gradle https://github.com/Devskiller/jpa2ddl , qui génère le schéma JPA. In inclut toutes les propriétés, stratégies de nommage, types d'utilisateurs, etc.

Vous pouvez également l'utiliser pour générer des migrations de schéma automatisées pour Flyway .

J'aime Hibernate (BEAUCOUP), et je pense que cela donne un code d'une qualité incroyablement bonne, mais je ne voudrais pas le perdre plus tôt dans une base de données de production que je laisserais un baby-sitting à un ours grizzly très bien élevé. Tout peut aller très bien pendant un moment, mais le seul incident où cela se passe est VRAIMENT , mauvais.

Je suggérerais que, dans un environnement de test, hibernate génère des schémas de base de données. Testez ceux dans un environnement de test. Ensuite, prenez ces scripts dans l'environnement de production et exécutez-les. Notez la spécificité ici; Même si les tests réussissent de manière fantastique, je ne laisserai pas simplement Hibernate se déchaîner sur le serveur de production. Prenez la sortie de Hibernate schemagen, testez-la et, une fois validée, déployez-la sur le serveur de production.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top