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; }