我正在處理目標是將現有應用程序轉換爲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
映射到一個表與數據的類型的單個id
柱numeric(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。
從錯誤消息看,它看起來不像問題是將NUMERIC(38,0)裝入VARCHAR(50)中。看起來反過來 - 嘗試將VARCHAR(50)轉換爲NUMERIC(38,0)。 – 2010-07-08 17:01:18
另請注意,如果您的SQL Server中有IDENTITY列,則在大多數情況下基本上不應插入顯式值。 (並且SSMA有一些邏輯可以將Oracle序列用法轉換爲SQL Server IDENTITY,但是您必須在SSMA中配置它) – IgorK 2011-02-02 11:08:15