【SSH】訂單編號類型引發的小問題

問題

做SSH網上商城項目的時候,遇到一個網上付款的問題。在已有訂單情況下,對該訂單進行付款,會提示已經付過款的訂單無法繼續付款。問題在於,我還沒有對該訂單付過款。寥寥幾筆,做個小記錄。問題截圖如下:

這裏寫圖片描述

解決方法

在正常情況下,訂單編號並不是類似從1開始遞增的,所以我修改訂單編號oid字段類型爲varchar,取消自增長,值爲幾位字母和數字的組合。修改數據庫,就必須要修改Order實體中oid屬性類型爲String,重新生成getters和setters,其他與此有關聯的也要進行相應的修改。

如果不修改Order實體的映射文件,提交訂單的時候還是要報錯的。報錯信息如下:

這裏寫圖片描述

打開Order.hbm.xml文件,將

<generator class="native"/>

改爲:

<generator class="assigned"/>

OK,遇到問題,好好珍惜,積極解決。

小結

映射文件中,id元素中的generator用來爲該持久化類的實例生成唯一的標識,hibernate提供了很多內置的實現。

Increment:由hibernate自動遞增生成標識符,用於爲long, short或者int類型生成唯一標識。如DB2、SQL Server、MySQL 中的主鍵生成機制。 這種方式可能產生的問題是:不能在集羣下使用。

identity :由底層數據庫生成標識符(自動增長),返回的標識符是 long, short 或者int類型的。

sequence :根據底層數據庫序列生成標識符,返回的標識符 是long, short或者 int類型的。如Oralce中的Sequence。

hilo :使用一個高/低位算法來高效的生成long, short 或者int類型的標識符,需要額外的數據庫表或字段提供高位值來源。

uuid.hex :用一個128-bit的UUID算法生成32位字符串類型的標識符。

uuid.string:與uuid.hex 類似,只是生成的主鍵未進行編碼(長度16),不能應用在PostgreSQL數據庫中。

native :根據底層數據庫的能力選擇identity, sequence 或者hilo中的一個。

assigned :主鍵由外部程序負責生成,讓應用程序在save()之前爲對象分配一個標識符。

foreign :使用另外一個相關聯的對象的標識符。和聯合一起使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章