2009-09-04 19 views
0

Hibernate設定からRDBMSにスキーマを伝播しようとしています。コードはエラーメッセージなしで実行されますが、データベースは更新されません。Hibernateからスキーマを作成できません

ヒントありがとうございました !

更新これはHSQLデータベースでのみハイバネートコアです。

更新2はい、私はSchemaExport(私は休止状態から離れています)を使用する必要がありますが、データベースにフラッシュしません。 HSQLインプロセスデータベース(jdbc:hsqldb:file:config/config)です。

更新3何かがHSQLで動作しないので、今MySQLで試してみるとうまくいきます。

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

あなたはそれ自身で休止状態を使用していますか?それとも春を使っていますか? – Zoidberg

+0

forループのコードがヒットしますか? –

答えて

0

トランザクションがコミットされていることを確認してください。一部のデータベースは、トランザクションがロールバックされた場合に実際にスキーマの変更をロールバックします。

0

あなたが完了したときにコミットを試みることはできますが、データベースがわからない場合は、これが問題であるかどうかわかりません。あなたのデータベーススキーマを表現するためにpojoを使用すると仮定すると、なぜ次のようなHibernateをスキーマクラスで構築するのではなく、JDBC接続を介して1つずつ実行していますか?このthis link

0

は今、これを持って見る詳細は

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

version 1.7で始まるHSQLDBがすべての変更をフラッシュするためにメモリ内でシャットダウンする必要があると思われます。

関連する問題