7

我將Play項目從版本2.3.4遷移到2.4.2。這些項目使用JPA(Hibernate)和Evolutions。我有一個初始的Evolutions SQL腳本,它用一些示例數據填充數據庫。這個腳本現在不再工作了,因爲Evolution腳本現在在Hibernate生成表之前執行,這顯然會導致錯誤。這是一個理想的行爲?有什麼方法可以改變執行順序嗎?在Play Framework中播放Evolution和JPA 2.4

回答

0

演變是關於通過純SQL腳本創建和更新數據庫。所以,如果你使用一些框架,生成數據表本身,比如Hibernate,那麼你需要關閉變陣(或關閉自動生成,只使用變陣)

填充數據庫啓動時

我有一個類似卡桑德拉問題,我做了什麼 - 只是創建一個讀取CQL文件並執行它的代碼,並在創建實際數據表後運行此代碼。

正如我所看到的Hibernate已經有這個功能 - 你需要把你的自定義的SQL代碼到/import.sql文件在classpath的根目錄:

如果在根目錄中名爲import.sql文件類路徑('/import.sql')Hibernate將在創建數據庫模式後執行從文件讀取的SQL語句。

+0

感謝您的詳細解答,但我不同意。 Play文件指出:「當您使用關係數據庫時,您需要一種方法來跟蹤和組織您的數據庫模式演變」。這並沒有說如何訪問該數據庫。在我看來,Evolution是Hibernate的完美補充,因爲Hibernate只具有有限的遷移可能性。重點是,它在Play中工作了很多年,所以我認爲這是一個錯誤。 – linsenfips

+0

你寫了「Hibernate生成表」,這意味着Hibernate組織你的數據庫。您只需要使用一個數據庫更新機制 - 進化或hibernate表生成。如果你想使用進化然後關閉休眠表生成: http://stackoverflow.com/questions/221379/hibernate-hbm2ddl-auto-update-in-production。 –

+0

警告:我們已經看到Hibernate用戶試圖使用SchemaUpdate自動更新生產數據庫的模式。這可能會很快結束,並且不會被您的DBA所允許。 –