java - 强制 Hibernate 在删除并重新创建数据库后创建表

标签 java mysql spring hibernate jakarta-ee

我正在使用 Java 2 EE 开发 Web 应用程序。我也使用hibernate 和mysql。 为了恢复备份文件,在我的应用程序中的某个时刻,我需要删除当前数据库并重新创建它,我按如下方式进行:

    Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/?user=user&password=pass");
    Statement statement = (Statement) conn.createStatement();
    statement.executeUpdate("DROP DATABASE tcs;");
    statement.executeUpdate("CREATE DATABASE tcs charset=utf8 collate=utf8_persian_ci;");

删除并重新创建后,我需要使用默认用户(spring security 用户)初始化数据库

    User admin = new User();
    UserAuthority ROLE_USER = new UserAuthority("ROLE_USER");
    ROLE_USER.save();
    admin.addUserAuthority(ROLE_USER);
    admin.setEnabled(true);

    admin.save();

但是在最后一行应用程序抛出这个异常

Hibernate: insert into roles (authority) values (?)
[DEBUG][16:19:17,734] [http-bio-8080-exec-10] NewPooledConnection:367  com.mchange.v2.c3p0.impl.NewPooledConnection@bcbe33a handling a throwable.
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'tcs.roles' doesn't exist

我知道 hibernate 在启动时创建表,但在这种情况下它无法在 drop/recreate 后重新创建表,那么我如何强制 hibernate 再次创建表? 或者假设有类似 Hibernate.createTable(Class) 的东西吗?

最佳答案

您需要将以下属性添加到您的配置中:

每次创建和销毁 SessionFactory 时删除并重新创建:

<property name="hbm2ddl.auto">create-drop</property>

其他可能的选择:

  • 验证:验证架构,不对数据库进行任何更改。
  • 更新:更新架构。
  • 创建:创建模式,销毁以前的数据。

关于java - 强制 Hibernate 在删除并重新创建数据库后创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999259/

相关文章:

java - 如何在 Docker 容器内设置 wildfly 的堆大小?

java - 应用程序被重复打开

mysql - 错误 2013 MySQL 服务器 "system error: 104"

java - 不能同时在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean 获取多个包

java - Spring中的自动缓存失效

java - 如何使用 spring data cassandra 创建表?

java - android 如何在android的Asynctask中加载sqlite数据

php - 按名称对 MySQL 列进行排序的脚本

php - MySQL 查询未按预期返回

java - Spring启动测试@WebMethod