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?
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
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.
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