Hibernate MS-SQL错误列类型找到:decimal,expected:float

时间:2011-10-10 12:16:27

标签: java hibernate

注意:问题末尾的答案

我在My SQL数据库中创建了一些列,并且之前显然没有创建浮点,因为我必须查找它。为了符合SQL,我创建了我的列:

ALTER TABLE传感器 ADD Field1_Calibration_Offset DECIMAL(4,3);

每列的时间为8。

我已经在我的java代码中定义了这些:

@Column(name =“FIELD1_CALIBRATION_OFFSET”) private Float field1CalibrationOffset;

生成错误:

用于列FIELD1_CALIBRATION_OFFSET的PsDb.dbo.Sensor中的列类型错误。找到:十进制,预期:浮动

最终答案

按照@ jbrookover的回答,我改为BigDecimal,我得到了:

Wrong column type in PsDb.dbo.Sensor for column FIELD1_CALIBRATION_OFFSET. Found: decimal, expected: numeric(19,2)

所以我查看了我的hibernate映射并做了:

@Column(name = "FIELD1_CALIBRATION_SCALE", columnDefinition="decimal", precision=4, scale=3)
private BigDecimal field1CalibrationScale;

2 个答案:

答案 0 :(得分:8)

我倾向于让Hibernate创建我的表,所以我不是100%就此,但没有理由认为Java的Float映射到MySQL的DECIMAL。实际上,根据文档,DECIMAL是精确类型,而FLOAT和REAL是近似值。我相信Java的Float是一个近似值,所以这种不匹配似乎是合乎逻辑的。

如果您想使用MySQL的DECIMAL,请尝试Java java.math.BigDecimal而不是java.lang.Float

答案 1 :(得分:7)

我自己使用Jboss 7和MSSQL来解决这个问题。

我相信@The Thom的答案是正确的,值得更多曝光。

请注意,如果您的值与数据库列的名称相同,则name参数是可选的。

@Column(name="myColumnName" columnDefinition="decimal", precision=18, scale=3)
private BigDecimal myColumnName;