注意:问题末尾的答案
我在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;
答案 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;