2009-05-07 10 views
5

Après avoir lu Hibernate: hbm2ddl.auto=update in production?, certaines questions ont été soulevées. Tout d'abord, la raison pour laquelle j'utilise Hibernate est d'être indépendant du fournisseur de base de données (pas besoin d'écrire 10 versions de la "même" requête sql, par exemple tsql vs sql).Comment créer un schéma de base de données en utilisant Hibernate

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

  1. hbm2dll = mise à jour
  2. des scripts SQL pur (ddl).

La première alternative est largement discutée dans le fil ci-dessus. La deuxième alternative est mauvaise parce que cela signifie que je suis de retour à mon premier problème: "Je ne veux pas créer d'instructions sql dépendant du vendeur de base de données". (Cette instruction peut être false si "all" (atlast support des bases de données Hibernate) est en train d'implémenter le DDL (le sous-ensemble de SQL utilisé pour définir et examiner la structure d'une base de données.) Equal).

Répondre

5

Est-ce que tous les changements dans le développement/mode de mise en scène et le transfert et exécuter des scripts dans la production manuellement (ou automatiquement, mais ne laissez pas les exécuter mise en veille prolongée). Les scripts peuvent nécessiter un réglage puisque la mise à jour de hbm2ddl ne couvre pas tous les cas.

En fait, je ne laisse jamais hibernate exécuter ddl sur n'importe quelle 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=; 
+0

Battez-moi au coup de poing. Entièrement d'accord. –

1

J'aime Hibernate (beaucoup), et je pense qu'il est un peu incroyablement bon code de qualité, mais je ne tourner plus tôt lâche sur une base de données de production que je ne laisserais une babysit d'ours grizzly très bien élevée. Tout peut aller bien pendant un moment, mais le seul incident où il va mal est VRAIMENT mauvais. Ma suggestion serait dans un environnement de test, ont hibernate générer des schémas de base de données. Testez ceux dans un environnement de test. Ensuite, amenez ces scripts dans l'environnement de production et exécutez-les. Notez la spécificité là; Même si les tests réussissent de façon fantastique, je ne permettrais pas à Hibernate de se déchaîner sur le serveur de production. Prenez la sortie de Hibernate schemagen, testez-la, et une fois qu'elle est validée, déployez-la sur le serveur de production.

+1

N'essayant pas d'être accusatoire ici, mais avez-vous lu ma question? – Schildmeijer

+0

J'ai fait; Y a-t-il une manière spécifique dans laquelle ma réponse indique une mauvaise compréhension de votre question? –

+0

La première phrase de votre réponse. – Schildmeijer

3

Normalement, les outils qui récupèrent 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. Dans inclut toutes les propriétés, les stratégies de nommage, les types d'utilisateur, etc.

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

Questions connexes