web-dev-qa-db-fra.com

Comment fonctionne exactement la propriété spring.jpa.hibernate.ddl-auto au printemps?

Je travaillais sur mon projet d'application de démarrage Spring et j'ai remarqué que parfois, une erreur de délai de connexion sur ma base de données se produisait sur un autre serveur (SQL Server). Cela se produit spécialement lorsque j'essaie d'effectuer une migration de script avec FlyWay, mais cela fonctionne après plusieurs tentatives.

Ensuite, j'ai remarqué que je n'avais pas spécifié spring.jpa.hibernate.ddl-auto dans mon fichier de propriétés. J'ai fait des recherches et trouvé qu'il est recommandé d'ajouter spring.jpa.hibernate.ddl-auto= create-drop en développement. Et changez-le en: spring.jpa.hibernate.ddl-auto= none en production.

Mais je n'ai pas vraiment compris comment cela fonctionne réellement et comment hibernate génère un schéma de base de données en utilisant la valeur create-drop ou none. Pouvez-vous s'il vous plaît expliquer techniquement comment ça marche vraiment, et quelles sont les recommandations en utilisant cette propriété dans les serveurs de développement et de production. Je vous remercie

62
METTAIBI

Pour mémoire, la propriété spring.jpa.hibernate.ddl-auto est spécifique à Spring Data JPA et permet de spécifier une valeur qui sera éventuellement transmise à Hibernate sous la propriété connue, hibernate.hbm2ddl.auto.

Les valeurs create, create-drop, validate et update influencent fondamentalement la manière dont la gestion de l’outil de schéma manipulera le schéma de base de données au démarrage.

Par exemple, l'opération update interrogera l'API du pilote JDBC pour obtenir les métadonnées de la base de données, puis Hibernate comparera le modèle d'objet créé en fonction de la lecture de vos classes annotées ou de vos mappages XML HBM et tentera d'ajuster le schéma sur-le. -mouche.

L'opération update tentera par exemple d'ajouter de nouvelles colonnes, de nouvelles contraintes, etc., mais ne supprimera jamais une colonne ou une contrainte qui existait peut-être auparavant, mais ne le fait plus dans le cadre du modèle d'objet d'une exécution antérieure.

Généralement, dans les scénarios de scénario de test, vous utiliserez probablement create-drop pour créer votre schéma, votre scénario de test ajoute des données fictives, vous exécutez vos tests, puis lors du nettoyage du scénario de test, les objets de schéma sont supprimés, laissant une base de données vide.

En développement, il est fréquent que les développeurs utilisent update pour modifier automatiquement le schéma afin d'ajouter de nouveaux ajouts au redémarrage. Mais comprenez à nouveau que cela ne supprime pas une colonne ou une contrainte pouvant exister d’exécutions précédentes qui n’est plus nécessaire.

En production, il est souvent fortement recommandé d'utiliser none ou de ne pas spécifier cette propriété. En effet, il est courant que les administrateurs de base de données examinent les scripts de migration pour les modifications de base de données, en particulier si votre base de données est partagée entre plusieurs services et applications.

117
Naros