【问题标题】:How to have Hibernate create tables on startup?如何让 Hibernate 在启动时创建表?
【发布时间】:2013-05-17 22:31:55
【问题描述】:

我在 HSQLDB 中使用 Hibernate,我注意到当应用程序启动时,HSQLDB 中没有创建表。直到第一次选择或第一次插入,所有表才在 HSQLDB 中创建。有什么方法可以在应用程序启动时创建所有表?

编辑回复 Pangea:

我修改了我们的 hibernate cfg xml 文件,使其包含以下内容:

<property name="hbm2ddl.auto">create</property>
<prop key="hibernate.hbm2ddl.auto">create</property>

但是在服务器启动时仍然没有创建表。它们仅在第一次插入或选择后创建。您提到表将在创建 Hibernate 会话工厂期间创建。在执行插入或选择之前,我们的代码不会调用 Configuration.buildSessionFactory()。有没有办法在此之前创建表?

【问题讨论】:

    标签: hibernate hsqldb


    【解决方案1】:

    将以下属性添加到您的 hibernate cfg 文件中,以便在创建 hibernate 会话工厂期间自动创建表。

    <prop key="hibernate.hbm2ddl.auto">create</prop>
    

    【讨论】:

      【解决方案2】:

      这就是hibernate通常的工作方式。它在被调用时启动。如果您正在使用带有 servlet 调用的 Web 应用程序,您可以创建一个空的构造函数并在应用程序开始时调用它,或者在 web.xml 中启动它。

      如果您不让您的程序知道您希望在程序开始时启动休眠,它不会创建它,直到它被告知或 SessionFactory 需要它。

      据我所知,您拥有所有正确的语法。只需确保您希望在程序开始时更早调用它的 else 即可。

      Hibernate.org 有一个 HibernateUtil.class 的创建示例,您可以修改它以添加一个空的构造函数来调用。

      希望这有助于在您的应用程序开始时启动 Hibernate。

      【讨论】:

      • 好的,我在程序开始时调用了 Configuration.buildSessionFactory() 并且它可以工作。谢谢。
      • 没问题的人!这里有一些有用的链接。第一个是带有 XML 配置的 HibernateUtil 类的 Hibernate.org 教程。其次是一个很棒的 youtube 系列,带有带注释的类和带注释的会话工厂。 (给你一点额外的作业)它将嵌入你的大脑,就像它是我的一样。 :)linklink
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 2016-06-08
      • 2020-06-05
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多