18

MySQL 5.0 で動作するように記述されたレガシー システムに直面しており、MysQL 5.5 (要件) に移行する必要があります。maxvalueMySQL 5.5 のシステム ワードのように見える1 つの列が という名前であることがわかりました。したがって、この列を含むすべての Hibernate クエリで構文エラーが発生します。

原因: java.sql.BatchUpdateException: SQL 構文にエラーがあります。near 'maxvalue を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

Hibernate は自動的にではなく、フィールド名を ` で囲んでいるようです。クエリを抽出すると`maxvalue`、MySQL 5.5 で正しく実行されます。

特定のフィールド/テーブルに対して明示的に逆引用符を強制する方法を見つけました。問題は、他にいくつの列名がこのような問題を引き起こすか分からないということです。すべてのテーブル/列名を自動的にバッククォートするように Hibernate に指示する方法はありますか? (これにより有効な SQL が生成されますが、MySQL のデフォルトでそれが行われない理由がわかりません)。

編集この議論は、私が望むことは不可能だとほとんど信じさせます。

4

1 に答える 1

41

この目的のために、文書化されていないプロパティがあります。使用する、

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

また

<property name="hibernate.globally_quoted_identifiers">true</property>
于 2013-02-18T19:15:07.047 に答える