2010-07-08 155 views
0

我正在處理目標是將現有應用程序轉換爲SQL Server的項目。但是,我遇到了ID生成問題 - 特別是數據類型的轉換。SQL Server轉換異常:將數據類型varchar轉換爲數字時出錯

用於我的ID列中的休眠註解如下:

@Id 
@GeneratedValue(generator="ID_GEN", strategy=GenerationType.TABLE) 
@TableGenerator(name="ID_GEN", table="[$SSMA_seq_SEQ_EXAMPLE_ID]") 
@Column(name="ID", unique="true", nullable="false") 
public String getId() { 
    return this.id; 
} 

此本表中映射到varchar(50)的ID列,而$SSMA_seq_SEQ_EXAMPLE_ID映射到一個表與數據的類型的單個idnumeric(38,0)

當我嘗試插入(通過創建一個Java對象並堅持它),我得到以下異常:com.microsoft.sqlserver.jdbc.SQLServerException: Error converting data type varchar to numeric

從概念上講,numeric(38,0)適合於varchar(50)是有道理的,但似乎SQL Server implicit conversion在這種情況下不起作用。不幸的是,在這個時候改變數據庫定義不是一種選擇。

是否有任何全局設置會在hibernate或SQL Server中強制執行此轉換?因爲我使用hibernate來生成ID,所以在將此對象提交給數據庫之前,我無法控制生成的用於獲取ID的SQL。

+2

從錯誤消息看,它看起來不像問題是將NUMERIC(38,0)裝入VARCHAR(50)中。看起來反過來 - 嘗試將VARCHAR(50)轉換爲NUMERIC(38,0)。 – 2010-07-08 17:01:18

+0

另請注意,如果您的SQL Server中有IDENTITY列,則在大多數情況下基本上不應插入顯式值。 (並且SSMA有一些邏輯可以將Oracle序列用法轉換爲SQL Server IDENTITY,但是您必須在SSMA中配置它) – IgorK 2011-02-02 11:08:15

回答

0

我最終編寫了一個假定已知數據類型並進行了轉換的自定義生成器。詳情請參閱this

相關問題