2015-09-06 33 views
0

我在Spring MVC和Hibernate中使用Java。我有一堆實體,一切正常。但是,如果我向某個數據庫列添加列,我的服務將開始崩潰,直到我還用新列更新相關的Java實體類。如何讓Hibernate忽略不在實體中的表列?

有沒有辦法讓Hibernate忽略它無法識別的數據庫列?如果您希望實體中的字段不在數據庫表中,那麼您可以在字段上使用@Transient。我想要的是相反的。

如果這是不可能的,那麼當數據庫更新必須與Hibernate服務一起使用時,如何部署Hibernate服務?

回答

2

將新列添加到由Hibernate管理的表後,Hibernate不會「崩潰」。 Hibernate模式驗證只會驗證映射列可以存儲在數據庫中,但不會查找數據庫中未映射的列。

什麼可能導致您的問題是新的非空字段。添加這樣的字段將使Hibernate無法將任何內容保存到該表中,因爲它忽略了該字段的存在,並且不會在插入時提供它。解決這個問題有:

  • 提供了默認的ALTER TABLE操作不使用此字段
  • 不是標誌着場不空,而在另一個層執行非空檢查
  • 使用預置客戶端插入觸發器來填充空字段
  • 或者,您甚至可以先添加新字段,然後部署您的新版本應用程序,然後將新字段標記爲非空。