2011-10-10 23 views
4

注:答案在找到Hibernate的MS-SQL錯誤的列類型:小數,預計:浮

我在我的SQL數據庫中創建一些列,並顯然不是創造浮點之前,因爲我的問題的結束必須查找它。對於SQL合規性,我創建了以下列:

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

每列8倍。

我在Java代碼中定義等這些:

@Column(name = 「FIELD1_CALIBRATION_OFFSET」) 私人浮動field1CalibrationOffset;

將產生的錯誤:在PsDb.dbo.Sensor列FIELD1_CALIBRATION_OFFSET

錯列類型。發現:小數,預計:浮法

最終答案

按照下面@ jbrookover的回答,我改變爲BigDecimal,我得到:

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

所以,我看着我的休眠映射和做的:

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

回答

6

我傾向於讓Hibernate創建我的表,所以我不是100%的,但沒有理由認爲Jav a的Float映射到MySQL的DECIMAL。事實上,根據文檔,DECIMAL是一個確切類型,而FLOAT和REAL是近似值。我相信Java的Float是一個近似值,所以這種不匹配似乎是合乎邏輯的。

如果您想使用MySQL的DECIMAL,請嘗試Java的java.math.BigDecimal而不是java.lang.Float

+0

你說得對,Java的float是一個近似值。我應該想到自己使用BigDecimal。讓我來研究一下。 我會在我的數據庫中使用什麼來匹配浮動?另外,它是MS SQL Server而不是MySql。 – Thom

+4

更改爲BigDecimal後,我得到: PsDb.dbo.Sensor中的列FIELD1_CALIBRATION_OFFSET的列類型錯誤。發現:小數,預計:數字(19,2) 所以,我看着我的休眠映射和做的: \t @Column(name = 「FIELD1_CALIBRATION_SCALE」,columnDefinition = 「小數」,精度= 4,規模= 3) \t private \t BigDecimal \t \t field1CalibrationScale; – Thom

+1

謝謝@TheThom您的評論剛剛救了我的屁股 – Bnrdo

4

我自己遇到了這個問題,使用Jboss 7和MSSQL。

我相信@ Thom的回答是正確的,值得更多的曝光。

請注意,如果您的值與數據庫列的名稱相同,則name參數是可選的。

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

這真的是對另一個答案的評論。我不認爲它應該作爲一個問題發佈。 –

+0

@ joelgoldstick我不是故意把它作爲問題發佈,而是更多地作爲答案。湯姆在對上述答案的評論中提到了這個解決方案。在我意識到他最初的問題的答案隱藏在上面的答案的評論中之前,我親自看到了這篇文章2次。我的錯誤是 – andreico

+0

。我回答。 –

相關問題