2010-10-15 141 views
7

當我創建(使用JPA-java persistence api)持久性單元,然後持久化實體時,它們會自動在數據庫中創建相應的表和字段。用JPA創建數據庫?

我也可以讓它自動創建數據庫(如果它不存在)?

我OBJECTIF是:

我的意思是創建數據庫中的表和字段,而不是數據庫,如果數據庫尚未建立之前(用手) - 這些都失敗。所以在運行項目之前(如果需要,它會自動生成表和字段),我首先必須創建(手工)數據庫。

我用:Eclipse的(Java的,休眠的Flex /空氣),MySQL的

感謝所有信息

+0

看到http://opensource.atlassian.com/projects/hibernate/browse/HHH-1853 – Bozho 2010-10-15 12:55:57

+0

雖然我理解的意圖,我覺得這是一個非常糟糕的主意。就個人而言,我不會使用與創建數據庫的用戶相同的用戶。 – 2010-10-15 13:30:27

回答

8

該數據庫具有手動創建(Fortunatly你沒有問爲什麼;-)。這與用於連接到數據庫服務器的用戶/密碼組合相似,後者必須已經存在才能連接到數據庫。

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塊或添加拋出的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(); 
}