Question

<property name="hibernate.hbm2ddl.auto">update</property>

je peux créer mon schéma de base de données, ajouter automatiquement les propriétés, la contrainte, clé etc ... Mais qu'en est-mettre à jour le schéma de base de données? Si je supprime une propriété de mes entités, mise en veille prolongée ne l'enlève pas, ou si je change une contrainte, mise en veille prolongée ne touche pas contrainte déjà créé ...

Alors, il y a un moyen de faire hiberner vraiment mettre à jour le schéma de base de données?

Merci.

Était-ce utile?

La solution

Nous avons créé un outil pour notre propre qui crée les gouttes nécessaires de colonnes de base de données et de tables et ajouter ces gouttes au SQL généré pour les mises à jour de base de données. Mais nous avons dû ajouter quelques extras à la génération SchemaUpdate à lui faire du travail:

  • Nous avons dû ajouter des contrôles pour les propriétés non nulles. Cela comprend l'émission d'une instruction UPDATE sur les données à nulls si possible éliminez, ce qui conduit à l'autre point de valeurs par défaut.
  • Nous avons dû ajouter des contrôles des valeurs par défaut des colonnes. Les valeurs par défaut sont inférée la valeur NULL d'une colonne et son type de données. Primitives sont toujours initialisées à zéro ou faux, énumérations non NULL à sa première valeur ENUM, mais pour d'autres objets que le script doit être modifié manuellement.
  • Nous soutenons même ajouté pour le redimensionnement des colonnes varchar, parce qu'il y avait des cas où la longueur de la colonne de base de données et le @Column(length) diffèrent.

Mais pour mettre tout cela ensemble, un outil complet ne peut être créé de cette façon, parce que si une colonne est renommé dans le code? Que faire si le type change d'une manière pas automatiquement convertible (bool à ce jour?). Si vous n'avez pas accès à une histoire refactoring, vous ne pouvez pas toujours des changements Propager.

Autres conseils

Nous utilisons actuellement liquibase pour faire des changements de base de données automatique dans une base de données manière agnostique. Il peut être possible d'extraire liquibase commandes directement à partir de vos annotations de mise en veille prolongée, mais je ne pense pas qu'un tel outil existe donc vous aurez probablement à faire vous-même.

Non il n'y a pas. hbm2ddl ne vise pas à faire une gestion complète de vos migrations de schéma. Il est préférable si vous l'utilisez uniquement pour les changements additifs à votre schéma et modifier la main (les scripts générés) pour toute autre chose.

Certains projets qui pourraient être utiles pour gérer les changements de schéma:

  • mybatis (1049 sur les questions marquées SOW)
  • Liquibase (663 sur les questions marquées SOW)
  • voies de migration (400 questions marquées sur SOW)

Une autre ressource que vous pouvez trouver utile est la comparaison caractéristique sur le site des voies de migration (Il existe d'autres projets connexes dessus y).

Hibernate fournit une classe appelée SchemaUpdate qui est capable de synchroniser un ensemble d'applications mise en veille prolongée avec un schéma de base de données

Old Post , mais laissez le savoir communautaire s'il est bon:)

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