Hibernation 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 lorsqu'il n'est pas? Et quelle est l'alternative?

ce sont des changements qui pourraient se produire au-dessus de DB:

  • nouveaux tableaux
  • nouvelles colonnes dans les anciennes tables
  • colonnes supprimées
  • type de données d'une colonne changé
  • un type d'une colonne a changé ses attributs
  • tableaux abandonnés
  • valeurs d'une colonne changée

Dans chaque cas, quelle est la meilleure solution?

926
demandé sur Mahozad 0000-00-00 00:00:00

10 réponses

De la documentation communautaire :

mise en veille prolongée.hbm2ddl.auto valide ou exporte automatiquement le schéma DDL vers 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é lorsque SessionFactory sera fermé explicitement.

p.ex. valider | mettre à jour | Créer /Créer-Supprimer

donc la liste des options possibles est,

  • "valider : valider le schéma, n'apporte aucune modification à la base de données.
  • mise à jour : mettre à jour le schéma.
  • create : crée le schéma, détruisant les données précédentes.
  • create-drop : supprimer le schéma lorsque le SessionFactory est fermé explicitement, typiquement lorsque l'application est arrêté.

ces options semblent destinées à être des outils de développeurs et non à 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?

945
répondu James McMahon 2017-05-23 12:02:48

il y a aussi la valeur non documentée de" Aucun " pour la désactiver complètement.

164
répondu Michiel Verkaik 2012-06-08 14:52:14

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 modifications à votre modèle, mais je ne ferais pas confiance à cela sur une base de données de production. Une version antérieure de la documentation disait que c'était expérimental, au moins; I ne pas connaître l'état actuel.

par conséquent, pour notre base de données de production, ne pas définir hibernate.hbm2ddl.auto - la valeur par défaut est de ne pas faire de modifications à 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.

143
répondu Peter Hilton 2009-01-13 08:11:45

j'utiliserais liquibase pour mettre à jour votre base de données. la fonctionnalité de mise à jour de schéma d'hibernate n'est vraiment que o. K. pour un développeur pendant qu'ils développent de nouvelles fonctionnalités. Dans une situation de production, la mise à niveau de la base de données doit être traitée avec plus de soin.

50
répondu Pat 2009-03-23 07:40:34

bien qu'il soit tout à fait un vieux poste, mais comme j'ai fait quelques recherches sur le sujet ainsi pensé de le partager.

mise en veille prolongée.hbm2ddl.auto

selon la documentation, il peut avoir quatre valeurs valides:

créer | mettre à jour | valider/créer-supprimer

explication du comportement de ces valeurs:

  • créer :- de créer le schéma, les données déjà présentes (s'il existe) dans le schéma est perdu
  • mise à jour:- mise à jour le schéma avec les valeurs données.
  • Valider: - Valider le schéma. Il ne fait pas de changement dans le DB.
  • create-drop:- de créer le schéma de détruire les données déjà présentes(si il existe). Il supprimez également le schéma de la base de données lorsque SessionFactory est fermé.

ce qui suit sont les points importants à noter:

  • dans le cas de mise à jour , si le schéma n'est pas présent dans la base de données, alors le schéma est créé.
  • dans le 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>
  • dans le cas de create-drop , le schéma n'est pas abandonné à la clôture de la session. Il ne tombe qu'en fermant le site de la session.
  • dans le cas où je donne une valeur à cette propriété(disons abc, au lieu des quatre valeurs ci-dessus discutées) ou il est juste laissé en blanc. Il présente le comportement suivant:

    - si le schéma N'est pas présent dans la DB: - It crée le schéma

    - si le schéma est présent dans le DB: - mise à jour le schéma.

27
répondu amit 2016-08-07 15:50:28

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

par défaut, il n'exécute aucune création ou modification automatiquement sur DB. Si l'utilisateur définit une des valeurs ci-dessous, alors il fait des changements de schéma DDL automatiquement.

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

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

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

    <entry key="hibernate.hbm2ddl.auto" value="validate">
    
  • create-drop - créer et supprimer le schéma automatiquement lorsqu'une session est de début et de fin

    <entry key="hibernate.hbm2ddl.auto" value="create-drop">
    
22
répondu Vinod Kumawat 2017-07-10 12:20:28

j'ai consacré un blog post pour les communes les plus Hibernate DDL stratégies de génération :

  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 souple doit utiliser voie de migration .

Cependant, même si vous utilisez Flyway, vous pouvez encore 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.

17
répondu Vlad Mihalcea 2018-01-17 08:31:59

si vous ne voulez pas utiliser de chaînes de caractères dans votre application et que vous recherchez des constantes prédéfinies, jetez un oeil à la classe org.hibernate.cfg.AvailableSettings incluse dans le jar Hibernate, où vous trouverez une constante pour tous les réglages 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
répondu Stefan Haberl 2015-06-08 10:17:30

je pense que vous devriez vous concentrer sur le

SchemaExport Class 

cette classe rend votre Configuration dynamique Il vous permet donc de choisir les suites que vous préférez...

Checkout [SchemaExport]

7
répondu Vishal Sharma 2012-06-21 02:12:24

validate : il valide le schéma et n'apporte aucune modification au DB.

Supposons que vous avez ajouté une nouvelle colonne dans le fichier de mappage et effectuez l'opération insert, cela lancera une Exception "manquant la colonne XYZ" parce que le schéma existant est différent de l'objet que vous allez insérer. Si vous modifiez le tableau en ajoutant cette nouvelle colonne manu

4
répondu