0

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

ヒントはありますか?ありがとうございました !

更新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();
    }
4

3 に答える 3

0

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

于 2009-09-04T18:24:30.917 に答える
0

完了したらコミットを強制することができますが、使用しているデータベースを知らなくても、これが問題かどうかはわかりません。pojo を使用してデータベース スキーマを表すと仮定すると、次のようなスキーマ クラスに組み込まれた Hibernates を使用する代わりに、JDBC 接続を介してステートメントを 1 つずつ実行するのはなぜですか?

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

詳細については、このリンクを参照してください

于 2009-09-04T18:32:50.853 に答える