2012-04-28 46 views
1

這不是一個真正的問題,但它在我的開發過程中有時是一件煩人的事情。比方說,我有一些實體(db是根據這些實體創建的,而不是其他實體),我決定添加一個列,刪除一列或其他東西,現在我需要將這些更改提交給我的數據庫。數據庫設計更改JPA

這樣做的最好方法是什麼?我有時不得不重新啓動Glassfish;有時部署它就足夠了;有時我需要手動清除表,因爲重新啓動不會有幫助。我在persistence.xml的策略設置爲Create,但其他選項並沒有真正幫助我。

是否有任何標準方法提交從實體到數據庫的更改?

回答

1

從我所知道的JPA中沒有標準的方法來在開發過程中自動更改表,並仍然保留表中的數據。對於某些情況,切換到CREATE-DROP將執行這個技巧 - 但是這樣你就會丟失表中的數據,並且很快需要編寫腳本來填充表。正如你所說,這對你來說不是一個大問題,從CREATE-DROP到一個適用於多人項目的方法可能是一個好習慣。我/我們的方式是在repo中有一個sql腳本文件,當我修改我的實體時,我(手動)修改該腳本或添加一個新腳本(如果該表已在生產中或表中的數據是或者多於幾行插入或通過使用創建並且不容易再現)。這樣我們可以不斷合併和運行代碼。其他需要運行當前開發分支的項目成員針對表(表)過期的(本地?)數據庫只需執行sql腳本。

+0

是的,這就是我所做的,我不介意丟失數據(分別記住,但我知道我無法避免它)。但是我的問題的一點是,有時需要花費很多時間才能更改數據庫,並且我不知道如何加快此過程(如果我真的需要重新啓動服務器或部署足夠,等等) – 2012-04-28 18:40:49

+0

聲音像IDE或建築物+然後部署特定情況。如果通過asadmin重新部署應用程序(ear-file),CREATE-DROP應該正確執行並且不需要重新啓動glassfish。如果你通過maven-script或netbeans/eclipse /部署,不管有什麼配置問題,甚至是一般的cache/tmp-dir都會出現問題。 – esej 2012-04-28 20:02:26