これで、キーワードとかぶるエンティティを作ったとしても、@Tableアノテーションでテーブル名を明示的に指定しなくても良くなる。
Entityクラス
Oracleでは識別子に指定できないUserがテーブル名となるエンティティクラスを定義する。@Entity public class User { @Id public Long id; public String name; }
hibernate.auto_quote_keywordの指定
persistence.xmlのproperties部にhibernate.auto_quote_keywordの設定を追加する。設定値にtrueを指定すると、自動的にダブルクォートで囲われるようになる。
<properties> <property name="hibernate.auto_quote_keyword" value="true" /> </properties>
実行結果
ログ上で確認するとこんな感じにクォートで囲われているのがわかる。Hibernate: create table "User" (id number(19,0) not null, name varchar2(255 char), primary key (id))
この設定値をfalseにした場合は、こんな結果になる。
Hibernate: create table User (id number(19,0) not null, name varchar2(255 char), primary key (id)) ERROR: HHH000389: Unsuccessful: create table User (id number(19,0) not null, name varchar2(255 char), primary key (id)) ERROR: ORA-00903: 表名が無効です。
JPA(Hibernate)経由でSQL実行しているだけだといいけど、自分でSQLを書く必要が出てきた時にはまりそうだなぁと思ったり。