次のように定義されたプロパティを持つテーブルがあります。
@Column(name="\"SERIAL#\"")
Hibernate がデータを挿入すると、すべて正常に動作します。しかし、Hibernate-Envers(HE) に関して言えば、HE はフィールド名を二重引用符で囲むのを忘れています。
フィールドの周りに二重引用符を使用するように強制するにはどうすればよいですか?
次のように定義されたプロパティを持つテーブルがあります。
@Column(name="\"SERIAL#\"")
Hibernate がデータを挿入すると、すべて正常に動作します。しかし、Hibernate-Envers(HE) に関して言えば、HE はフィールド名を二重引用符で囲むのを忘れています。
フィールドの周りに二重引用符を使用するように強制するにはどうすればよいですか?
二重引用符を使用しますか、それとも名前をエスケープしますか? エスケープしたいだけの場合は、バッククォート (`) を使用すると、Hibernate がそれをデータベースがエスケープに使用するメカニズムに変換します。したがって、あなたの例は次のようになります。
@Column(name="`SERIAL#`")
好奇心から: なぜ列名に # が必要なのですか? 私はいつも、特殊文字は識別子では悪い考えだと思っていました:-)
問題を解決するために、フィールド名に「#」を使用しないように管理しているため、Hibernate も Hibernate Envers もフィールド名をエスケープする必要はありません。
編集:
実際、これは Hibernate Envers 3.6.2.Final のバグです。後で解決する必要があります。
編集 2 : Hibernate Envers 3.6.3 および Hibernate Envers 4.0.0Alpha でバグが修正されました。
編集 3 : Hibernate Core 3.6.4.Final でバグが修正されました。