1

我正在以编程方式配置我的休眠会话工厂:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html#configuration-programmatic

private static SessionFactory buildSessionFactory() {

        // Create the SessionFactory from hibernate.cfg.xml
        Configuration configuration = new Configuration();
        configuration.configure();

        configuration.setProperty("hibernate.connection.url", myUrl);
        configuration.setProperty("hibernate.connection.username", myUser);
        configuration.setProperty("hibernate.connection.password", myPass);

        serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); 

        return configuration.buildSessionFactory(serviceRegistry);
}

但问题是,这些属性仅在使用来自 dao 的休眠操作时才加载。

protected void startOperation() {
    session = HibernateUtil.getSessionFactory().openSession();
    tx = session.beginTransaction();
}

因此,当我的应用程序启动时,hibernate.hbm2ddl.auto 似乎不起作用。我可以以某种方式强制 hibernate.hbm2ddl.auto 在我的程序或任何其他解决方案中启动吗?

建议或其他选择,想法?

4

2 回答 2

4

您需要设置 hibernate.hbm2ddl.auto 或使用

configuration.setProperty("hibernate.hbm2ddl.auto", "create-drop");

使用hibernate.propertieshibernate.cfg.xml 之类的配置文件是设置设置的首选方式。

于 2012-09-28T08:11:31.667 回答
0

是的。new Configuration()应该从 加载所有属性hibernate.cfg.xml

似乎您 已配置为延迟初始化,仅在调用SessionFactory时才构建 。HibernateUtil.getSessionFactory()

如果是控制台程序, SessionFactory.buildSessionFactory()在main方法中简单调用

如果是 Web 应用程序,可以使用ServletContextListener.contextInitialized(ServletContextEvent sce)或 Spring 在服务器启动期间强制SessionFactory.buildSessionFactory()执行。

于 2012-09-28T09:04:30.287 回答