程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 關於mysql下hibernate實體類字段與數據庫關鍵字沖突的問題,mysqlhibernate

關於mysql下hibernate實體類字段與數據庫關鍵字沖突的問題,mysqlhibernate

編輯:JAVA綜合教程

關於mysql下hibernate實體類字段與數據庫關鍵字沖突的問題,mysqlhibernate


  好久沒寫了,都忘記博客了,趁著現在還在公司,寫的東西是經過驗證的,不是在家憑記憶力寫的,正確率有保障,就說說最近遇到的一件事情吧。

  以前一直用的oracle數據庫,這次項目我負責的模塊所在的系統是用的mysql數據庫,結果當初建表時候,字段什麼的全靠百度,實在是英語不行,然後有個字段叫usage,是mysql數據庫的關鍵字,當時自己測試時候就發現了,但是想著我只是sql語句,加下``,一樣可以用,所以就沒引起重視。

  結果一期已經上線了,現在對這個表要進行其他的維護,才發現用hibernate直接進行增刪改時候出了問題,因為它生成的語句肯定是不帶``這個進行轉義的,而這時候如果你又不想改實體類不想改表字段,那麼只需要在實體類配置文件中加上``即可。

  具體演示代碼如下:

  1.初始配置文件:

1 <hibernate-mapping>
2 <class name="com.entity.test" table="test">
3 <id column="id" name="id" type="java.lang.Long">
4 <generator class="native"/>
5 </id>
6 <property column="usage" length="1" name="usage" type="java.lang.String"/>
7 </class>
8 </hibernate-mapping>

  在這種配置下,直接針對整個實體類進行操作會報錯,就是那啥xxx 'near usage xxx那些東西,就是usage附近有錯誤,具體的英文不行我也看不懂,只知道它引起。

  2.更改後配置文件

<hibernate-mapping>
<class name="com.cnnct.test" table="test">
<id column="id" name="id" type="java.lang.Long">
<generator class="native"/>
</id>
<property column="`usage`" length="1" name="usage" type="java.lang.String"/>
</class>
</hibernate-mapping>

  這樣更改後,無需更改其他東西,照常使用即可,那兩個`的位置是通常鍵盤下,數字鍵1的左邊的那個,和~一個鍵位的,而不是單引號,這個別弄錯了。

  

  接下來是題外話,雖然有了這個解決方案,但是最後還是無奈的改了字段,雖然會很麻煩,畢竟一期都已經上線了,而且挺多地方代碼用到了這個字段的,也不知道有沒有改漏了。之所以不采納這個解決方案的原因是以後項目進行迭代更替時候,不可避免的有可能還是需要工具類重新生成實體,一般工具生成實體是不會帶有``這個的,就會導致報錯。然後後來人維護而不是我本人維護,這種錯誤就比較難找了。

  所以總的來說,各位程序猿在定義表結構時候盡量不要用數據庫的關鍵字,定義完字段,感覺有可能是關鍵字的都先去試一下,免得後面白多這麼多功夫。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved