2016-02-15 71 views
1

我通過使用Hibernate的JPA ...休眠:hbm2ddl.auto值= 「更新」 或 「無」

在我的persistence.xml我配置Hibernate更新架構如下:

<property name="hibernate.hbm2ddl.auto" value="update"/> 

是更好地讓JPA管理我們的數據庫,或者是更好的(手動)管理數據庫自己...

<property name="hibernate.hbm2ddl.auto" value="none"/> 

的高級開發人員,我知道對我說,第二種方法比較好..因爲這是一種習慣DBA在所有好的企業中都有所作爲......但是我想要更多的解釋......我想知道爲什麼第二種方法更好?爲什麼我們不應該讓JPA管理這些表格以及它自己的關係......

回答

1

由於很多原因,特別是在生產環境中,這並不好。

  • 版本 - 你可能要版本的數據庫中,大多數人都 手動跟蹤的分貝的變化,這是很好的準備復歸腳本的每一個變化。在版本發佈時,重要的是讓 回滾計劃以防萬一。

  • 腳本執行失敗 - 在一個充滿數據的數據庫,ALTER TABLE其 添加一個非空列會失敗,只是因爲現有記錄不 沒有此列。因此,手動處理最好的步驟是 。

  • 意外更改。您團隊的開發人員可能會意外地提交錯誤配置的實體,並對您的模式造成嚴重破壞。

最好是hibernate.hbm2ddl.auto的值保持到validate,這樣實體映射對數據庫結構驗證,如果有任何不匹配,Hibernate會發出警告。

+0

很好的解釋...謝謝 – taboubim

1

通常最好將aut ddl設置爲none。 這是因爲您可能會意外地在除開發之外的集成/生產環境中導致更新。其次,自動生成的hibernate腳本可能與dba使用的約定不一致。