Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hibernate MS-SQL Wrong column type Found: decimal, expected: float

Tags:

java

hibernate

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;
like image 812
Thom Avatar asked Oct 10 '11 12:10

Thom


2 Answers

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.

like image 124
jbrookover Avatar answered Oct 24 '22 09:10

jbrookover


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;
like image 31
andreico Avatar answered Oct 24 '22 09:10

andreico