簡體   English   中英

在刪除和重新創建數據庫之后強制Hibernate創建表

[英]Force Hibernate To Create Tables After Dropping and Recreating database

我正在使用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)

    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在啟動時會創建表,但在這種情況下,它無法在刪除/重新創建后重新創建表,那么我如何強制hibernate再次創建表? 或假設有類似Hibernate.createTable(Class)東西?

您需要將以下屬性添加到配置中:

每次創建和銷毀SessionFactory時刪除並重新創建:

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

其他可能的選擇:

  • validate:驗證模式,不對數據庫進行任何更改。
  • 更新:更新架構。
  • create:創建架構,銷毀以前的數據。

對於未來的googlers:它畢竟是如此簡單,我只需要建立會話工廠,所以我添加了這一行,它就像魅力:

new Configuration()。configure()。buildSessionFactory();

請注意, buildSessionFactory()在hibernate 4中已棄用,但我想你可以使用這里的代碼來做同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM