Hibernate使用Programmatic Configuration,启动hibernate.hbm2ddl.auto

时间:2012-09-28 08:03:28

标签: java database hibernate hbm2ddl sessionfactory

我以编程方式配置我的hibernate sessionfactory:

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使用hibernate操作时,这些属性只被加载。

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

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

建议或其他选择,想法?

2 个答案:

答案 0 :(得分:4)

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

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

使用 hibernate.properties hibernate.cfg.xml 等配置文件是设置设置的首选方式。

答案 1 :(得分:0)

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

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

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

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