2016-09-20 36 views
1

而我重構代碼庫我通過Hibernate註釋中USER實體來了,如同它是很好的保持DB約束休眠實體

@Column(name = "personal_email", nullable = true, length = 64) 
private String personalEmail; 

...居然有數據截斷錯誤,如果personalEmail超過64個字符。

我個人認爲保留這樣的註釋是一種不好的做法。我認爲我們不必通過數據庫實體元信息破壞我們的代碼。

我的方法是我將刪除長度和可爲空的註釋名稱,並讓DB在任何違反約束的情況下通知。

我認爲只保留這種類型的註釋的優點是它不會傳播錯誤的數據到數據庫級別。

我想知道您的建議......

反正我會改變列寬personalEmail在DB。

回答

2

這取決於您更信任哪個系統。 Hibernate(Java)或你的數據庫。

也許這個清單會幫助你。

優勢休眠

  • 是跟蹤大約在相同的代碼庫的限制。兩個系統之間不會切換來檢查它們。
  • 隨意爲用戶和您自己的日誌文件提供更詳細的信息。

Disdvantages對於Hibernate

  • 每個約束脩改必須被編譯。沒有可能的運行時變化,因此更多的維護(服務器重啓,等等)。

優勢,爲數據庫

  • 您可以從的JavaEE/JavaSE的更改爲任何其他系統。

  • 如果需要,在運行時進行約束更改(小心不要推薦)。

缺點數據庫

  • 不在同一個代碼庫。違規可能很難找到。

  • Java中的更多代碼可用於轉換更具體的用戶信息。數據庫日誌不方便用戶使用。

+1

實際上,這取決於您是否通過休眠或不休眠來創建數據庫模式。如果沒有,那麼在註釋中沒有任何優勢(除了可能用於信息目的)。 – Kayaman

+0

我正在考慮改變約束,而運行時不應該這樣做。 http://dba.stackexchange.com/questions/27153/alter-table-on-live-production-databases –

+0

對不起,我真的不明白你在說什麼。 – Kayaman