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.BigDecimal
instead of java.lang.Float
.
I've ran into this problem myself, using Jboss 7 and MSSQL.
I believe @The Thom's answer is correct and deserves more exposure.
please note that name parameter is optional if your value has the same name as the database column.
@Column(name="myColumnName" columnDefinition="decimal", precision=18, scale=3)
private BigDecimal myColumnName;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With