grails: минимальное ограничение и атрибуты типа BigDecimal (несоответствие типов?) - PullRequest
1 голос
/ 26 октября 2011

В классе Grails я указал

BigDecimal  amount

для представления суммы денег в транзакции.

Затем в разделе ограничений я указал:

amount      ( nullable:false, min : 100)

Чтобы указать, что минимальная сумма будет принята в долларах. Это компилируется просто отлично, но среда выполнения выдает ошибку несовместимости типов:

2011-10-26 15:17:06,116 [main] ERROR validation.ConstrainedProperty  - Exception thrown applying constraint [min] to class [class com.mycorp.mypkg.MyProprietaryDefinition] for value [100]: Parameter for constraint [min] of property [amount] of class [class  com.mycorp.mypkg.MyProprietaryDefinition] must be the same type as property: [java.math.BigDecimal]

Так можно ли предположить, что я не могу указать минимальные значения для атрибутов BigDecimal?

Спасибо!

Alexx

Ответы [ 3 ]

7 голосов
/ 27 октября 2011

Grails ожидает, что значения min и max будут иметь тот же тип данных, что и связанное свойство, в то время как значение scale всегда должно быть целым числом. Преобразование в BigDecimal или добавление .0 к концу значения решает проблему.

amount(nullable: false, min: 100.0, max: 9999.99, scale: 2)

Я недавно подал отчет об ошибке IntelliJ IDEA IDEA-75471 об этой самой проблеме. IDEA 10.5.2 неправильно отмечает предупреждение о проверке, если значения min и max не являются целочисленными, а значение scale не совпадает с типом данных свойства. Предупреждение можно игнорировать, используя //noinspection GroovyAssignabilityCheck.

2 голосов
/ 27 октября 2011

Groovy приведение к минимальному значению также должно работать.

 min: 0 as BigDecimal

или возможно

 min: 0G
0 голосов
/ 26 октября 2011

Интересно.Любые из "min" значений, которые я указал в атрибутах BigDecimal, были отклонены.Я закомментировал их все и успешно развернул приложение.Я попытался добавить «.0» до конца значения в одну минуту, и приложение было перестроено и развернуто.Один за другим я повторил это, за исключением последнего комментария мин.Итак, я раскомментировал это как есть, мин: 0, и приложение сломалось.

Так что я думаю, что это ответ, что если у вас нет десятичной части к вашему мин (или макстакже предположим), вам нужно добавить один.

...