【问题标题】:Create database with JPA?用 JPA 创建数据库?
【发布时间】:2010-10-15 12:10:00
【问题描述】:

当我创建(使用 JPA - java persistence api)一个持久性单元,然后是持久性实体时,它们会自动在数据库中创建相应的表和字段。

我也可以让它自动创建数据库(如果它不存在的话)吗?

我的目标是:

我的意思是它在数据库中创建表和字段,而不是数据库,如果之前没有(手动)创建数据库 - 一切都会失败。因此,在运行项目之前(如果需要,它将自动生成表和字段),我首先必须(手动)创建一个数据库。

我使用:Eclipse(Java、Hibernate、Flex/Air)、MySQL

感谢您提供所有信息

【问题讨论】:

标签: java mysql database eclipse jpa


【解决方案1】:

必须手动创建数据库(幸好你没有问为什么;-)。这类似于您用于连接到数据库服务器的用户/密码组合,它必须已经存在才能连接到数据库。

【讨论】:

    【解决方案2】:

    我对此问题的解决方案是在创建实体管理器之前添加以下内容:

      Connection connection =
          DriverManager.getConnection("jdbc:mysql://localhost/?user=" + DB_USER);
      Statement stmt = connection.createStatement();
      stmt.executeUpdate("CREATE DATABASE IF NOT EXISTS " + DB_NAME);
    

    您需要用 try/catch 块包围它,或者将 throws SQLException 表示法添加到它所在的函数中。因此,例如,这是我的initEntityManager 函数:

    public static void initEntityManager() throws SQLException {
        Connection connection =
            DriverManager.getConnection("jdbc:mysql://localhost/?user=" + DB_USER);
        Statement stmt = connection.createStatement();
        stmt.executeUpdate("CREATE DATABASE IF NOT EXISTS " + DB_NAME);
        emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        em = emf.createEntityManager();
    }
    

    【讨论】:

    • 为避免 unicode 问题,我建议您这样查询:“CREATE DATABASE IF NOT EXISTS”+ DB_NAME +“CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci”
    猜你喜欢
    • 2012-11-27
    • 2016-03-01
    • 2020-02-08
    • 1970-01-01
    • 2021-05-24
    • 2022-08-12
    • 1970-01-01
    • 2016-10-11
    • 2020-02-20
    相关资源
    最近更新 更多