Hibernate – 名前がnameの列がDESCなどのキーワードである場合、挿入できません
問題
MySQLデータベースの “category”という名前のテーブルには、カラム名として ”
DESC
“というキーワードが含まれています。
CREATE TABLE `category` ( `CATEGORY__ID` int(10) unsigned NOT NULL AUTO__INCREMENT, `NAME` varchar(10) NOT NULL, `DESC` varchar(255) NOT NULL, PRIMARY KEY (`CATEGORY__ID`) USING BTREE );
Hibernate XMLマッピングファイル
<hibernate-mapping>
<class name="com.mkyong.stock.Category" table="category" catalog="mkyongdb">
...
<property name="desc" type="string">
<column name="DESC" not-null="true"/>
</property>
...
</class>
</hibernate-mapping>
またはHibernateアノテーション
@Column(name = "DESC", nullable = false)
public String getDesc() {
return this.desc;
}
カテゴリテーブルに挿入すると、次のエラーメッセージが表示されます。
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
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 'DESC)
values ('CONSUMER', 'CONSUMER COMPANY')' at line 1
... 35 more
解決策
Hibernateでは、 “keyword”カラム名に挿入するには、 ‘
[カラム名]
‘のように囲む必要があります。
Hibernate XMLマッピングファイル
<hibernate-mapping>
<class name="com.mkyong.stock.Category" table="category" catalog="mkyongdb">
...
<property name="desc" type="string">
<column name="[DESC]" not-null="true"/>
</property>
...
</class>
</hibernate-mapping>
またはHibernateアノテーション
@Column(name = "[DESC]", nullable = false)
public String getDesc() {
return this.desc;
}