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