簡體   English   中英

Hibernate:對MySQL使用反引號,但對HSQL使用反引號

[英]Hibernate: use backticks for MySQL but not for HSQL

我工作的項目(使用Java,Spring,Hibernate)最近從Oracle改為MySQL。 在某些情況下,代碼中的某些屬性是MySQL中的保留字,例如“release”。

有一些解決方案,1)重命名代碼中的屬性和后續的getter / setter方法,還更新調用這些方法的代碼2)使用@Column(name =“`release`”)在代碼中注釋屬性。 這告訴hibernate在與數據庫交談時引用該名稱。

我寧願遠離第一種方法來減少破壞更多東西的機會。 第二種方法是“ok”,除了它特定於MySQL。 在我們的開發中。 設置我們使用HSQL,它不喜歡這些列名稱的反引號。

我查看了org.hibernate.mapping.Column類,我發現它有“getQuotedName”方法,如果我可以繼承Column並告訴Hibernate使用我自己的Column類,我可能會覆蓋這些方法。

基於以下首選方法解決此問題的最佳方法是:a)不必重構代碼庫(b / c更改屬性名稱,getter / setter方法等)和b)希望應用程序仍然可以在HSQL中工作MySQL的。

在屬性文件中具有可以切換以打開/關閉某些列命名修復的屬性是合理的。 這提醒我,我嘗試使用自定義命名策略並覆蓋“columnName”方法來圍繞反引號中的列名稱...這不起作用,即使在MySQL上也是如此。

后退滴答解決方案聽起來不錯。 但是,如果它不起作用或您不想使用特定JPA公司的未記錄的功能:為什么不使用未在任何(或最常見)數據庫中保留的列名。

您無需更改Java屬性的名稱,只能為它們指定列名。

使用backtips。 這是告訴Hibernate你想要正確引用該標識符的方法。 巧妙的是,反引號也被用作MySQL的引用字符。 此反引號將轉換為數據庫的引用字符。 關於添加引號作為默認行為,我不確定Hibernate有這樣的選擇。 文檔中沒有任何內容提到可能的選項,我也不記得在測試套件中看到過類似的內容。 但我不認為這是一個好主意,因為“保留關鍵字”是例外,而不是規則。

暫無
暫無

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

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