我正在使用帶有 JPA / Hibernate 的 Postgresql 資料庫。當我向列添加約束時,即“nullable=false”,資料庫列不會更改以反映這一點。洗掉表并重新運行應用程式即可完成這項作業。
這可以通過 JPA/Hibernate 實作嗎 - 僅在不洗掉條目或表的情況下使用機制?像“嘗試更改表并拒絕在不一致的資料上這樣做”?在我的 application.properties 中,我設定了
hibernate.hbm2ddl.auto=update
任何其他設定似乎都在洗掉資料和/或表。
一個可行的解決方案是運行一個 ALTER TABLE 腳本并相應地添加一個約束注釋,但我不太喜歡這個。
uj5u.com熱心網友回復:
不可能向現有表添加約束。想一想——如果表中的資料不滿足約束怎么辦?你會得到整個應用程式的崩潰。所以 Hibernate 甚至沒有嘗試應用潛在的有害操作。
通常,使用 hibernate 管理資料庫模式的方法是錯誤的。自動生成模式適用于學習或 MVP 目的,但不適用于生產。此外,由于許多原因,SQL 遷移不是一個好主意。您應該使用特殊工具進行模式管理:liquibase(對我來說更好)或flywaydb
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411353.html
標籤:
上一篇:為什么無法執行孤兒移除?
