私はJava、Spring、Hibernateを使用するプロジェクトを最近OracleからMySQLに変更しました。コード内のいくつかのプロパティが、 "release"のようにMySQLの予約語である場合がいくつかあります。Hibernate:MySQLではバッククイックを使用しますが、HSQLでは使用しません。
コードとそれ以降のgetter/setterメソッドのプロパティの名前の変更、それらのメソッドを呼び出すコードの更新2)@Column(name = "` release` " )。これは、データベースと対話するときに名前を引用するように休止状態を指示します。
私は、より多くのものを壊す可能性を減らすために最初のアプローチから離れることを好むでしょう。 2番目のアプローチは「OK」ですが、MySQL固有のものになります。私たちの開発者では。私たちはHSQLを使用します。このHSQLは、これらの列名の回りのバッククォートが嫌いです。
org.hibernate.mapping.Columnクラスを見て、Columnをサブクラス化してHibernateに自分自身のColumnクラスを使用させることができるならば、私は潜在的にオーバーライドできる "getQuotedName"メソッドを持っているのが分かります。
a)コードベースをリファクタリングする必要がない(プロパティ名を変更するb/c、getter/setterメソッドなど)、b)アプリを依然として使用したいという好ましいアプローチに基づいて、この問題を解決する最善の方法HSQLとMySQLで動作します。
いくつかの列命名修正をオン/オフに切り替えることができるプロパティファイル内のプロパティを持つことは合理的です。私は、私はカスタムネーミング戦略を使用して、 "columnName"メソッドをオーバーライドして、バッククォート内のカラム名を囲んでみることを試みました。これはMySQL上でさえもうまくいきません。
明らかに、hibernate.globally_quoted_identifiers(http://opensource.atlassian.com/projects/hibernate/browse/HHH-4453)が使用できる(hibernate 3.5の私が信じるように)新しいプロパティがありますが、文書化されていませんhttp://opensource.atlassian.com/projects/hibernate/browse/HHH-5673)。 私はHibernate 3.3を使用しているので、これは私にとっては選択肢ではありません – codecraig
あなたの質問にちょうど答えましたが、私はこのことについて知らなかったのです。 – jpkrohling