Как указать двойную точность в спящем режиме?
Я пытаюсь создать таблицу из аннотаций спящего режима. Мне нужно иметь столбец типа Double, с длиной, указанной как: (10,2).
Поэтому синтаксис SQL выглядит следующим образом:
... DOUBLE(10,2) ....
Я попытался сделать это:
@Column(length = 10, precision = 2) ...
но когда я смотрю на мою созданную таблицу, она не указывается длина для столбца Double. У hibernate есть решение для этого или необходимо изменить конфигурацию таблицы вручную?
Спасибо!
Ответы
Ответ 1
Элемент length
аннотации Column применяется только в том случае, если используется столбцовый столбец. В вашем случае вы должны использовать элементы precision
и scale
.
@Column(precision=10, scale=2)
Вот что пишет о них спецификация:
-
int
- precision
- (Необязательно) Точность для десятичной (точная числовой). (Применяется только в том случае, если используется десятичный столбец.) -
int
- scale
- (Необязательно) Шкала для десятичной (точная цифра) колонка. (Применяется только в том случае, если десятичная используется столбец.)
Ссылки
- Спецификация JPA 1.0
- Раздел 9.1.5 "Обозначение столбца"
Ответ 2
@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")
Установка значений по умолчанию для столбцов в JPA
Ответ 3
Вы также можете использовать @Digits
из API валидатора спящего режима, который реализует стандарт проверки javax.validation Bean
@Digits(integer = 10 /*precision*/, fraction = 2 /*scale*/)
Из Javadocs
Аннотированный элемент должен быть числом в пределах допустимого диапазона Поддерживается типы:
- BigDecimal
- BigInteger
- CharSequence
- BigInteger
- byte, short, int, long и их соответствующие типы оберток
нулевые элементы считаются действительными