Hibernate MS-SQL Неправильный тип столбца Найдено: десятичный, ожидается: float - PullRequest
5 голосов
/ 10 октября 2011

Примечание: ответ в конце вопроса

Я создал несколько столбцов в моей базе данных My SQL и, очевидно, раньше не создавал числа с плавающей запятой, потому что мне пришлось его искать. Для соответствия SQL я создал свои столбцы следующим образом:

Датчик ALTER TABLE ADD Field1_Calibration_Offset DECIMAL (4, 3);

раз 8 для каждого столбца.

Я определил это в своем Java-коде так:

@ Столбец (name = "FIELD1_CALIBRATION_OFFSET") приватное поле с плавающей точкой1CalibrationOffset;

сгенерировавший ошибку:

Неправильный тип столбца в 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;

Ответы [ 2 ]

8 голосов
/ 10 октября 2011

Я склонен позволить Hibernate создавать свои таблицы, поэтому я не на 100% в этом, но нет никаких оснований предполагать, что Java Float отображается в DECIMAL MySQL. Фактически, согласно документации, DECIMAL является точным типом, в то время как FLOAT и REAL являются приблизительными значениями. Я считаю, что Java Float является приблизительным, поэтому это несоответствие кажется логичным.

Если вы хотите использовать DECIMAL в MySQL, попробуйте Java java.math.BigDecimal вместо java.lang.Float.

7 голосов
/ 18 марта 2016

Я сам столкнулся с этой проблемой, используя Jboss 7 и MSSQL.

Я полагаю, @ ответ Тома верный и заслуживает большего разоблачения.

обратите внимание, что параметр name является необязательным, если ваше значение совпадает с именем столбца базы данных.

@Column(name="myColumnName" columnDefinition="decimal", precision=18, scale=3)
private BigDecimal myColumnName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...