【问题标题】:How does Hibernate hbm2ddl automatically create table?Hibernate hbm2ddl如何自动建表?
【发布时间】:2016-06-06 02:35:27
【问题描述】:

我正在阅读 Java EE (JBoss) 应用程序的示例,并学习 Java EE 中的 Hibernate 基础知识。在src/main/resources/META-INF/persistence.xml下:

      <jta-data-source>java:jboss/datasources/MemberDS</jta-data-source>
      <properties>
         <!-- Properties for Hibernate -->
         <property name="hibernate.hbm2ddl.auto" value="create" />
         <property name="hibernate.show_sql" value="false" />
      </properties>
   </persistence-unit>

src/main/resources/import.sql下:

insert into Member (id, name, email, password, phone_number) values (0, 'John Smith', 'john.smith@mailinator.com', 'password', '2125551212')

model包下,有一个Member类。

我的问题:

  1. 应用程序如何在数据库中自动创建表成员?
  2. 它从哪里获得架构信息?
  3. 为什么以及如何在应用程序运行后自动执行“import.sql”?

【问题讨论】:

    标签: hibernate jpa hbm2ddl


    【解决方案1】:

    问题的答案,按顺序:

    1. 应用程序如何在数据库中自动创建Member 表?
      通过执行CREATE TABLE 语句。
    2. 它从哪里获得架构信息?
      来自您的实体/实体配置。
    3. import.sql 为何以及如何在应用程序运行后自动执行?
      至于方法:如果hibernate.hbm2ddl.auto 属性设置为create,Hibernate 将自动尝试从类路径的根目录导入import.sql 文件(可以使用hibernate.hbm2ddl.import_files 属性进一步指定要导入的文件) .
      至于为什么:我只能猜测,但我猜测 Hibernate 团队认为它可能是一个方便的功能?

    【讨论】:

    • 补充:假设您有一个现有的表格供客户用于您的企业级产品。如果现在您正在使用 Hibernate(也许以前使用过其他东西?),您可能希望该数据仍然存在并且在由 Hibernate 管理和创建的新表中。所以,是的,Hibernate 团队正在考虑有人从其他机制水平转移到 Hibernate 的情况。查找 liquibase,可以找到替代方法
    • “来自您的实体/实体配置。”,您的意思是它根据成员类的注释创建表吗?因为我在应用程序中没有看到任何其他XML配置,除了用于配置数据库的persistence.xml。请参阅添加的成员类定义。这个类是否单独要求hibernate创建表?
    • @ling 您正在运行多个帐户吗?为什么用户 user697911 提出问题,而用户 ling 提供详细信息?
    • 是的。两台电脑。一个在家,另一个在办公室。谢谢。
    • @ling 回答您的问题:是的,基于注释。
    猜你喜欢
    • 2015-11-16
    • 2011-07-31
    • 2011-07-15
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2013-06-28
    • 2012-04-29
    • 2018-11-19
    相关资源
    最近更新 更多