簡體   English   中英

Hibernate 不改變現有的列是一個缺點嗎?

[英]Hibernate doesn't alter the existing column is that a drawback?

我有一個連接到 PostgreSQL 數據庫的 Spring Boot 應用程序。 DAO 層是使用HibernateJPA實現的,並且啟用了auto-ddl ,以便 hibernate 負責創建表

今天突然我的朋友讓我將列類型BigInteger之一更改為String ,然后我說這是不可能的,因為該列已經填充了數據並且休眠不允許這樣做

現在他說這是 hibernate 的缺點,我們還就公司是否根據生產要求更改列定義進行了辯論?

  1. 休眠真的是缺點嗎?
  2. IT 公司或任何組織是否經常在生產中更改列定義?

您永遠不應該在生產中使用auto-ddl 它從未打算用於生產,而是用於開發。 您不應該使用它的原因是它可能會創建非最佳 DDL 或只會損壞您的數據。

在數據庫中進行更改的首選方法是創建一個文件夾,該文件夾將包含更改數據庫結構並將其存儲在版本控制中的所有 SQL 腳本。 通用名稱是migrations 然后,你可以手動在您的數據庫或使用工具,如運行這些腳本遷徙路線(我的建議),或liquibase

那么如何使用auto-ddl呢? 例如,您可以為新實體創建一個表,然后使用用於創建它的 DDL,並在應用一些調整(如有必要)后將其存儲在遷移中。 您還可以使用來自hibernate.hbm2ddl.auto 的驗證來檢查您的數據庫是否與您的實體匹配。

最后回答你的問題:

  1. 不,這不是休眠的缺點,因為auto-ddl從未打算進行數據庫遷移。
  2. 公司從不使用auto-ddl類的實用程序更改他們的數據庫。 有人(DBA 或開發人員)准備遷移腳本,然后在發布時手動或通過遷移工具應用它。

這不是 Hibernate 的缺點, auto-ddl旨在從模型創建模式而不是更新它。 原因是,正如您自己發現的那樣,這很少是直截了當的,並且可能需要對數據進行一些“按摩”。

我不會說在生產系統中更改數據類型是一種常見的做法,但這肯定是一個有效的場景。在我的這些年里,我不得不這樣做幾次,盡管這通常是微不足道的事情增加varchar的大小或從date更改為datetime BigInteger更改為String似乎有點不尋常,我會質疑您是如何到達該位置的,這可能表明設計存在問題。

無論哪種方式,解決方案是更改數據庫中的數據類型,這應該不是問題,然后更改Hibernate映射以反映此更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM