我正在使用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)?
Hibernate.createTable(Class)
对于未来的Google员工:毕竟很简单,我只需要建立会话工厂,所以我添加了这一行,它的工作原理就像是魅力:
新的Configuration()。configure()。buildSessionFactory();
请注意,buildSessionFactory()在Hibernate4中已弃用,但我想您可以在此处使用代码来完成同样的操作。
buildSessionFactory()