8
votes

Java équivalent pour les changements de schéma de base de données comme sud pour Django?

Je travaille sur un projet Django en utilisant le Sud pour suivre et gérer les changements de schéma de base de données. Je commence un nouveau projet Java à l'aide de Google Web Toolkit et je me demande s'il existe un outil équivalent. Pour ceux qui ne savent pas, voici ce que South fait:

  • Reconnaît automatiquement les modifications apportées à mes modèles de base de données Python (Ajout / Supprimer des colonnes, des tables, etc.)
  • Créez automatiquement des instructions SQL pour appliquer ces modifications à ma base de données
  • Suivez les migrations de schéma appliquées et appliquez-les dans l'ordre
  • Autoriser les migrations de données à l'aide du code Python. Par exemple, fractionnez un champ de nom dans un champ de premier nom et de nom à l'aide de la fonction Python Split ()

    Je n'ai pas encore décidé de mon java orm, mais l'hibernate ressemble à la plus populaire. Pour moi, la capacité de faire facilement des changements de schéma de base de données sera un facteur important.


1 commentaires

Cherchait la même chose, a également trouvé: myBatis et Flagway


5 Réponses :


2
votes

wow, sud sonne assez génial! Je ne suis pas sûr de quelque chose de hors de la case qui vous aidera presque autant que cela, cependant, si vous choisissez Hibernate comme solution ORM, vous pouvez créer votre propre suite de migration de données incrémentielle sans beaucoup de problèmes. < / p>

Voici l'approche que j'ai utilisée dans mon propre projet, cela a assez bien fonctionné pour moi pendant plusieurs années et plusieurs mises à jour / changements de schéma:

  1. Maintenir une table Schema_version dans la base de données qui définit simplement un numéro qui représente la version de votre schéma de base de données. Cette table peut être traitée en dehors de la portée de l'hibernate si vous le souhaitez.

  2. Maintenez le numéro de version "actuel" pour votre schéma à l'intérieur de votre code.

  3. Lorsque le numéro de version dans le code est plus récent que quelle est la base de données, vous pouvez utiliser l'utilitaire SchemeMateDate d'Hibernate qui détectera les ajouts de schéma (note, juste des ajouts) tels que de nouvelles tables, colonnes et contraintes.

  4. Enfin, j'ai maintenu un "script" si vous voulez des mesures de migration qui étaient plus que des changements de schéma identifiés par le numéro de la version de schéma qu'ils étaient requis. Par exemple, de nouvelles colonnes ont besoin de valeurs par défaut appliquées ou de quelque chose de cette nature.

    Cela peut ressembler à beaucoup de travail, surtout lorsqu'il est venu d'un environnement qui s'occupait de beaucoup de choses pour vous, mais vous pouvez obtenir une configuration comme ce rouleau assez rapidement avec Hibernate et il est assez facile d'ajouter sur comme vous continuez. Je n'ai jamais fini de modifier mon cadre de mise à jour incrémentielle à ce moment-là, sauf pour ajouter de nouvelles tâches de migration.

    Espérons que quelqu'un viendra une bonne réponse à une approche plus "mains-off", mais je pensais partager une approche qui a bien fonctionné pour moi.

    bonne chance à vous!


0 commentaires

1
votes

Comme je cherche les mêmes heses ce que j'ai réalisé jusqu'à présent.

Nous avons utilisé pour la première fois dbdeploy . Il gère le plus de choses pour vous, mais vous devrez écrire tous les scripts de transition par vous-même! Cela signifie que chaque changement que vous faites doit être dans son propre script que vous devrez écrire à partir de zéro. Pas très pratique, mais fonctionne très fiable.

La deuxième chose que j'ai rencontrée est Liquibase . Il stocke la configuration dans un seul fichier XML. Pas très intuitif de lire, mais pas responsable. De plus, il y a un plug-in Intellij Idea. Au moment de l'écriture, cela a toujours des problèmes mineurs, mais comme l'auteur m'a assuré, ils seront bientôt fixés.

La solution parfaite serait de se faire travailler au sud avec votre environnement Java. C'est vraiment un outil pour se marier: D


0 commentaires

0
votes

J'ai pensé à utiliser django-jython juste pour les migrations de DB dans notre application héritée Java. Le dernier Jython version est 2.5.4rc1, mais je pense que je peux atténuer le risque en l'utilisant simplement pour les migrations du Sud.

Surtout depuis que je peux utiliser InspectDB pour générer les modèles pour moi. Puis remplacer les parties de la Java avec python "de manière transparente".


0 commentaires

1
votes

Peut-être essayez peut-être Flyaway . Semble une bonne alternative.


0 commentaires

0
votes

Si vous utilisez hibernate, alors à la caisse liquibase

http://www.liquibase.org/databases.html

Cela fait environ 10 ans, il est donc assez solide. Il peut supporter d'autres , a juste une creuse sur leur site web. Checkout L'extension Liquibase + Hibernate ici:

https://github.com/liquibase/liquibase-hibernate


0 commentaires