Question Hibernate hbm2ddl.auto valeurs possibles et ce qu'ils font?


Je veux vraiment en savoir plus sur la mise à jour, l'exportation et les valeurs qui pourraient être données à hibernate.hbm2ddl.auto
J'ai besoin de savoir quand utiliser la mise à jour et quand pas? Et quelle est l'alternative?

Ce sont des changements qui pourraient se produire sur DB:

  • nouvelles tables
  • nouvelles colonnes dans les anciennes tables
  • colonnes supprimées
  • type de données d'une colonne modifiée
  • un type de colonne a changé ses attributs
  • tables tombées
  • les valeurs d'une colonne ont changé

Dans chaque cas, quelle est la meilleure solution?


900
2018-01-13 06:40


origine


Réponses:


Du documentation communautaire:

hibernate.hbm2ddl.auto Valide ou exporte automatiquement le schéma DDL dans la base de données lors de la création de SessionFactory. Avec create-drop, le schéma de la base de données sera supprimé lors de la fermeture explicite de SessionFactory.

par exemple. valider | mettre à jour | créer | créer-déposer

Donc, la liste des options possibles sont,

  • valider: valide le schéma, n'apporte aucune modification à la base de données.
  • mettre à jour: mettre à jour le schéma.
  • créer: crée le schéma, détruisant les données précédentes.
  • créer-déposer: supprime le schéma lorsque SessionFactory est explicitement fermé, généralement lorsque l'application est arrêtée.

Ces options semblent destinées à être des outils de développement et ne pas faciliter les bases de données de niveau de production, vous pouvez jeter un oeil à la question suivante; Hibernate: hbm2ddl.auto = mise à jour en production?


919
2017-11-06 19:25



Il y a aussi la valeur non documentée de "none" pour le désactiver complètement.


161
2018-06-08 14:52



La propriété de configuration est appelée hibernate.hbm2ddl.auto

Dans notre environnement de développement, nous définissons hibernate.hbm2ddl.auto=create-drop pour supprimer et créer une base de données propre chaque fois que nous déployons, de sorte que notre base de données est dans un état connu.

En théorie, vous pouvez définir hibernate.hbm2ddl.auto=update pour mettre à jour votre base de données avec des changements à votre modèle, mais je ne ferais pas confiance à une base de données de production. Une version antérieure de la documentation disait que c'était expérimental, au moins; Je ne connais pas le statut actuel.

Par conséquent, pour notre base de données de production, ne définissez pas hibernate.hbm2ddl.auto - La valeur par défaut est de ne faire aucune modification de la base de données. Au lieu de cela, nous créons manuellement un script de mise à jour DDL SQL qui applique les changements d'une version à l'autre.


141
2018-01-13 08:11



j'utiliserais liquibase pour mettre à jour votre db. La fonctionnalité de mise à jour du schéma de hibernate est vraiment seulement o.k. pour un développeur pendant qu'il développe de nouvelles fonctionnalités. Dans une situation de production, la mise à niveau de DB doit être traitée plus soigneusement.


50
2018-03-23 07:40



Bien que ce soit un vieux post mais comme j'ai fait quelques recherches sur le sujet, j'ai pensé à le partager.

hibernate.hbm2ddl.auto

Selon la documentation, il peut avoir quatre valeurs valides:

créer | mettre à jour | valider | créer-déposer

Voici l'explication du comportement montré par ces valeurs:

  • créer : - crée le schéma, les données précédemment présentes (s'il y en a) dans le schéma sont perdues
  • update: - met à jour le schéma avec les valeurs données.
  • valider: - valider le schéma. Il ne fait aucun changement dans la base de données.
  • create-drop: - crée le schéma en détruisant les données précédemment présentes (s'il y en a). Il supprime également le schéma de base de données lorsque la SessionFactory est fermée.

Voici les points importants à noter:

  • En cas de mettre à jour, si le schéma n'est pas présent dans la base de données, le schéma est créé.
  • En cas de valider, si le schéma n'existe pas dans DB, il n'est pas créé. Au lieu de cela, il va jeter une erreur: - Table not found:<table name>
  • En cas de créer-déposer, le schéma n'est pas supprimé à la fermeture de la session. Il ne disparaît qu'à la fermeture de SessionFactory.
  • Dans le cas où je donne une valeur à cette propriété (disons abc, au lieu des quatre valeurs ci-dessus) ou est laissée vierge. Il montre le comportement suivant:

    -Si le schéma n'est pas présent dans la BD: - Crée le schéma

    -Si le schéma est présent dans la BD: - mettre à jour le schéma.


26
2017-08-07 14:11



hibernate.hbm2ddl.auto valide et exporte automatiquement DDL vers le schéma lors de la création de sessionFactory.

Par défaut, il n'effectue aucune création ou modification automatiquement sur DB. Si l'utilisateur définit l'une des valeurs ci-dessous, il effectue automatiquement les modifications du schéma DDL.

  • créer - faire créer un schéma

    <entry key="hibernate.hbm2ddl.auto" value="create">
    
  • mise à jour - mise à jour du schéma existant

    <entry key="hibernate.hbm2ddl.auto" value="update">
    
  • valider - valider le schéma existant

    <entry key="hibernate.hbm2ddl.auto" value="validate">
    
  • create-drop - crée et supprime le schéma automatiquement lorsqu'une session commence et se termine

    <entry key="hibernate.hbm2ddl.auto" value="create-drop">
    

19
2018-05-11 17:26



J'ai dédié un article de blog pour le plus commun Stratégies de génération Hibernate DDL:

  1. le hibernate.hbm2ddl.auto="update" est pratique mais moins flexible si vous prévoyez d'ajouter des fonctions ou d'exécuter des scripts personnalisés.
  2. le approche la plus flexible est d'utiliser S'envoler.

Cependant, même si vous utilisez Flyway, vous pouvez toujours générer le script de migration initial en utilisant hbm2ddl. Dans Cet article, vous pouvez voir comment vous pouvez combiner le modèle d'entité JPA avec le modèle de table jOOQ.


16
2018-05-15 12:46



Si vous ne souhaitez pas utiliser de chaînes dans votre application et que vous recherchez des constantes prédéfinies, consultez org.hibernate.cfg.AvailableSettings classe incluse dans le JAR Hibernate, où vous trouverez une constante pour tous les paramètres possibles. Dans votre cas par exemple:

/**
 * Auto export/update schema using hbm2ddl tool. Valid values are <tt>update</tt>,
 * <tt>create</tt>, <tt>create-drop</tt> and <tt>validate</tt>.
 */
String HBM2DDL_AUTO = "hibernate.hbm2ddl.auto";

15
2018-02-10 09:56



Je pense que vous devriez vous concentrer sur le

SchemaExport Class 

cette classe rend votre configuration dynamique Cela vous permet donc de choisir les suites qui vous conviennent le mieux ...

Check-out [SchemaExport]


7
2018-06-21 02:12