Question

Je débutez dans le Hibernate et jusqu'à présent, il est pas trop difficile. Mais je suis confus au sujet de la propriété hbm2ddl.auto. Est-il possible d'exécuter manuellement tout cela fait pour initialiser les tables de base de données? Je veux seulement faire après que je fais mes changements de base de données, et non pas à chaque fois que je lance mon programme.

modifier Qu'en est-il à l'exécution? est-il un moyen dans mon programme Java pour réinitialiser les tables de programmation base de données? org.hibernate.tool.hbm2ddl.SchemaUpdate semble peut-être comme la bête à droite, mais je ne suis pas sûr de ce qu'il fait exactement.

Était-ce utile?

La solution

Je voudrais utiliser la hbm2ddl pour générer la base de données, puis utilisez la réplication quelle que soit / sauvegarde existe sur votre base de données pour enregistrer votre schéma de base de données, et d'utiliser ce script pour recréer votre base de données chaque fois que vous devez; seulement exécuter le hbm2ddl pour générer votre base de données lorsque vos changements de modèle d'objet.

Autres conseils

Utilisez les tâches de fourmi mise en veille prolongée: https://www.hibernate.org/381.html

Avec cet ensemble immobilier, vous pouvez générer créer des scripts / mise à jour pour la base de données et de les exécuter. Ceci est un excellent outil pour le prototypage, mais après un certain temps je suggère de passer à une autre stratégie de mise à jour DB.

ok, merci pour tous les indices! ce qui suit travaillé:

public class HibernateUtil {
...

  public static SessionFactory createSessionFactory(Properties p)
  {
    try {
        // Create the SessionFactory from hibernate.cfg.xml
        Configuration cfg = new AnnotationConfiguration().configure();
        if (p != null)
            cfg.addProperties(p);
        return cfg.buildSessionFactory();
    } catch (Throwable ex) {
        // Make sure you log the exception, as it might be swallowed
        System.err.println("Initial SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
  }
}

puis dans mon code d'application:

private void init() {
    Properties p = new Properties();
    p.setProperty("hibernate.hbm2ddl.auto", "create");
    Session session = HibernateUtil.createSessionFactory(p)
        .getCurrentSession();
    session.beginTransaction();
    session.getTransaction().commit();
    session.getSessionFactory().close();
    System.out.println("should be initialized....");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top