web-dev-qa-db-fra.com

Comment créer un schéma de base de données en veille prolongée pour la première fois et le mettre à jour en cas de modification du schéma?

Je veux créer un schéma de base de données en veille prolongée pour la première fois. Et en outre, s'il y a une modification dans le schéma, comme l'ajout d'une nouvelle table ou la suppression d'une colonne, je souhaite mettre à jour le schéma existant en conservant les données précédentes intactes.

Selon les options données à cette question , il semble que je puisse créer un schéma détruisant les données précédentes ou que je puisse mettre à jour le schéma.

Y a-t-il une valeur qui peut faire les deux?

17
M Sach

En fait, je viens de vérifier <property name="hibernate.hbm2ddl.auto" value="update" /> crée même des tables pour la première fois, puis plus tard, si la table/le schéma existe, il est mis à jour.

La propriété Update est applicable lors du démarrage ou de l'ajout d'un nouveau modèle. Vous souhaitez conserver les instances d'entité enregistrées antérieures. Il s'agit du style de création de schéma par défaut.

Il essaie de mettre à jour le schéma, si nécessaire. Les mises à jour suivantes sont prises en charge:

Voir certaines de mes observations

  • Ajouter un champ - Une nouvelle colonne est ajoutée à la table.
  • Renommer un champ - Une nouvelle colonne est ajoutée à la table, tandis que la colonne d'origine reste mais n'est plus utilisée. Remarque: Les données de l'ancienne colonne ne sont pas migrées vers la nouvelle colonne.
  • Supprimer un champ - La colonne reste mais n'est pas utilisée.
  • Modifier un type de champ - Le type de la colonne ne change pas, ce qui peut entraîner des exceptions de non-concordance de type.
  • Créer une entité - Crée une nouvelle table.
  • Renommer une entité - Crée une nouvelle table, tandis que la table d'origine reste.
  • Déplacer une entité vers un autre dossier - Crée une nouvelle table, tandis que la table d'origine reste.
  • Supprimer une entité - La table reste.
31
Jayasagar

Vous pouvez utiliser 'import.sql'.

Ajoutez un fichier import.sql dans la ressource comme suit:

/*create database at first time*/ 
CREATE SCHEMA your-database-name;

et ajoutez une ligne dans 'hibernate.cfg.xml' comme suit:

<hibernate-configuration>
    <session-factory>
       ...
       ...
       <property name="hbm2ddl.import_files">import.sql</property>
       ...
       ...
    </session-factory>
</hibernate-configuration>

Donc, s'il n'existe pas la base de données, hibernate crée un nouveau db.

4
cguzel

Je ne recommanderais pas de mettre à jour le schéma de base de données en fonction des changements d'entité. Essayez d'aller avec Flyway ou Liquibase . Vous pouvez trouver des questions similaires sur stackoverflow par exemple. Meilleures pratiques de génération de schéma Hibernate/JPA DB

1
Kris