2009-09-04 6 views
0

J'essaie de propager le schéma de la configuration Hibernate vers le SGBDR. Le code s'exécute sans aucun message d'erreur mais la base de données n'est pas mise à jour.Impossible de créer le schéma à partir de Hibernate

Des indices? Je vous remercie !

Mise à jour Il s'agit d'hibernate-core uniquement avec une base de données HSQL.

Mise à jour 2 Oui, je devrais utiliser SchemaExport (je ne suis pas en mode hibernation), mais il ne vide pas la base de données. C'est une base de données HSQL in-process (jdbc: hsqldb: fichier: config/config).

Mise à jour 3 Quelque chose ne fonctionne pas avec HSQL, en essayant maintenant avec MySQL et tout fonctionne bien!

public static void exportSchema() { 
     new SchemaExport(hbConfig).create(true, true); 
    } 


public static void exportSchemaXXX() { 

// sessionFactory and hbConfig defined in the class 

     Session sess = sessionFactory.openSession(); 

     sess.doWork(new Work() { 

      public void execute(java.sql.Connection conn) throws SQLException { 
       System.err.println("work"); 
       try { 
        Class dialect = Class.forName(hbConfig.getProperty("hibernate.dialect")); 
        String[] lines = hbConfig.generateSchemaCreationScript((Dialect) dialect.newInstance()); 

        for (String s : lines) { 
         System.err.println(s); 
         Statement stm = conn.createStatement(); 
         stm.execute(s); 
        } 
       } catch (Exception ex) { 
        System.err.println("Error: " + ex); 
       } 

      } 
     }); 

     sess.flush(); 
     sess.close(); 
    } 
+0

Utilisez-vous hibernate seul? Ou utilisez-vous le printemps avec? – Zoidberg

+0

Le code de votre boucle for est-il touché? –

Répondre

0

Assurez-vous que votre transaction est validée. Certaines bases de données annuleront les modifications de schéma si la transaction est annulée.

0

Vous pouvez essayer de forcer un commit lorsque vous avez terminé mais sans connaître la base de données que vous utilisez, je ne sais pas si c'est le problème. En supposant que vous utilisez pojo pour représenter votre schéma de base de données, pourquoi exécutez-vous les instructions une par une via une connexion JDBC au lieu d'utiliser Hibernates dans une classe de schéma similaire à ce qui suit?

config=new AnnotationConfiguration() 
config.addAnnotatedClass(Badge.class) 
config.addAnnotatedClass(Vote.class) 
config.configure() 
new SchemaExport(config).create(true,true)//create the database tables

Pour plus d'informations sur ce sujet, voir this link

0

Demandez maintenant. Il semble que HSQLDB commençant par version 1.7 a besoin d'être arrêté pour que la mémoire vive vider toutes les modifications.

Questions connexes