2013-02-18 59 views
12

我正在面對遺留系統編寫與MySQL 5.0一起工作,現在需要將其遷移到Mysql 5.5(需求)。我發現一列被命名爲maxvalue,這似乎是MySQL 5.5中的系統字。因此,包括此列的所有我的Hibernate查詢給語法錯誤:讓hibernate重新引用所有表/列名稱

Caused by: java.sql.BatchUpdateException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'maxvalue

似乎休眠不自動但是反引號`周圍的字段名呢。如果我提取查詢,請反引用``maxvalue \它在MySQL 5.5中正確運行。

我找到了solution如何明確強制特定字段/表格的反引號。問題是我不知道還有多少其他列名會產生這樣的問題。 有沒有辦法告訴Hibernate自動反引用所有表名/列名?(這將產生有效的SQL,我不知道爲什麼它不會默認爲MySQL)。

編輯This discussion幾乎讓我相信我想要的是不可能的。

+0

因爲Hibernate是一個開源項目.... :) – StarPinkER 2013-02-18 08:55:38

+0

@JermaineXu是和我們每個人都有時間停下來,無論我們實際上正在工作在學習和修復別人的代碼... – Basic 2013-02-26 11:03:48

回答

30

有一個non-documented屬性用於此目的:

<property name="hibernate.globally_quoted_identifiers" value="true"/> 
+0

完美!謝謝!現在這個屬性至少在某處被記錄。遺憾的是我正在運行hibernate 3.3,而且這個屬性在3.5中引入。我將無法驗證這個屬性是否正在工作,但我正在將您的答案標記爲已接受。 – 2013-02-19 09:22:13

+1

對於使用Spring的人來說:application.properties prop是:'spring.jpa.properties.hibernate.globally_quoted_identifiers = true' – pvgoddijn 2015-12-11 09:34:10

+0

「沒有這樣的東西作爲未記錄的功能。如果你的用戶不知道某個功能,它的a非特徵,擺脫它,這只是使源代碼複雜化。「 - https://developer.jboss.org/wiki/WhyThisProjectIsSuccessful – 2016-06-21 11:23:50

相關問題