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 来表示您的数据库模式,为什么您要通过 JDBC 连接一一执行语句,而不是使用类似于以下的模式类内置的 Hibernates?

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 回答
0

现在有这个。似乎从1.7 版开始的 HSQLDB需要关闭内存以刷新所有更改。

于 2009-09-11T10:25:38.530 回答