[Hibernate] Khắc phục lỗi Unable to insert if column named is keyword, such as DESC

Vấn đề
Bảng có tên “category” trong database MySQL, chứa cột có tên “DESC”.

SQL:
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
);

File mapping XML của 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>
Hoặc Hibernate annotation
Java:
@Column(name = "DESC", nullable = false)
    public String getDesc() {
        return this.desc;
    }
Khi insert dữ liệu vào bảng category, sẽ xuất hiện lỗi sau:
Code:
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

Giải pháp
Trong Hibernate, để insert dữ liệu vào cột có tên trùng với các “keyword", cần bọc tên cột trong dấu[] ([tên cột]).

File mapping XML của 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>
Hoặc Hibernate annotation
Java:
@Column(name = "[DESC]", nullable = false)
    public String getDesc() {
        return this.desc;
    }

Cám ơn các bạn đã theo dõi. Hẹn gặp lại các bạn trong các bài viết sau :D

Bài viết tham khảo tại: https://mkyong.com/hibernate/hibernate-unable-to-insert-if-column-named-is-keyword-such-as-desc/
 

Bình luận