Note: Answer at end of question
I have created some columns in my My SQL database and have evidently not created floating point before because I had to look it up. For SQL compliance, I created my columns thus:
ALTER TABLE sensor
ADD Field1_Calibration_Offset DECIMAL(4, 3);
Times 8 for each column.
I have defined these in my java code such:
@Column(name = “FIELD1_CALIBRATION_OFFSET”)
private Float field1CalibrationOffset;
which generated the error:
Wrong column type in PsDb.dbo.Sensor for column FIELD1_CALIBRATION_OFFSET. Found: decimal, expected: float
Final Answer
Following @jbrookover’s answer below, I changed to BigDecimal, I got:
Wrong column type in PsDb.dbo.Sensor for column FIELD1_CALIBRATION_OFFSET. Found: decimal, expected: numeric(19,2)
So I looked up my hibernate mappings and did:
@Column(name = "FIELD1_CALIBRATION_SCALE", columnDefinition="decimal", precision=4, scale=3)
private BigDecimal field1CalibrationScale;
I tend to let Hibernate create my tables, so I’m not 100% on this, but there is no reason to assume that Java’s Float maps to MySQL’s DECIMAL. In fact, according to the documentation, DECIMAL is an exact type while FLOAT and REAL are approximations. I believe Java’s Float is an approximation, so this mismatch seems logical.
If you want to use MySQL’s DECIMAL, try Java’s
java.math.BigDecimalinstead ofjava.lang.Float.