SQL Server转换异常:将数据类型varchar转换为numeric时出错

时间:2010-07-08 15:07:33

标签: sql-server hibernate sql-server-2008

我正在开发一个目标是将现有应用程序转换为SQL Server的项目。但是,我遇到了ID生成问题 - 特别是数据类型的转换。

我的ID列的hibernate注释如下:

@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;
}

此表的此ID列映射到varchar(50),而$SSMA_seq_SEQ_EXAMPLE_ID映射到具有单个id列且数据类型为numeric(38,0)的表。< / p>

当我尝试插入(通过创建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。

1 个答案:

答案 0 :(得分:0)

我最终编写了一个自定义生成器,它承担了已知的数据类型并进行了转换。有关详细信息,请参阅this