我正在开发一个目标是将现有应用程序转换为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。