Я пытаюсь создать таблицу из спящих аннотаций. Мне нужно иметь столбец типа Double с длиной, указанной как: (10,2). Таким образом, синтаксис SQL выглядит так:
... DOUBLE(10,2) ....
Я пытался сделать это:
@Column(length = 10, precision = 2) ...
но когда я смотрю на мою созданную таблицу, не указывается длина для столбца Double. Есть ли у hibernate решение для этого или необходимо вручную изменить конфигурацию таблицы?
Спасибо!
Элемент length аннотации Column применяется только в случае использования столбца со строковым значением . В вашем случае вы должны использовать элементы precision и scale.
length
precision
scale
@Column(precision=10, scale=2)
Вот что о них пишет спецификация:
int - precision - (Необязательно) Точность десятичной дроби (точная числовой) столбец. (Применяется только если используется десятичный столбец.) int - scale - (Необязательно) Шкала для десятичной дроби (точная цифра) колонка. (Применяется только если десятичная дробь используется столбец.)
int
@Column(name="Price", columnDefinition="Decimal(10,2) default '100.00'")
Установка значений по умолчанию для столбцов в JPA
Вы также можете использовать @Digits из API валидатора гибернации, который реализует стандарт проверки bean-компонентов javax.validation
@Digits
@Digits(integer = 10 /*precision*/, fraction = 2 /*scale*/)
Из Javadocs
Аннотированный элемент должен быть числом в пределах допустимого диапазона. Поддерживается Типы: BigDecimal BigInteger CharSequence BigInteger байт, короткий, int, long и соответствующие им типы оберток нулевые элементы считаются действительными
Аннотированный элемент должен быть числом в пределах допустимого диапазона. Поддерживается Типы:
нулевые элементы считаются действительными
Использование @ Тип (только в Hibernate):
@Column(precision = 5, scale = 4) @Type(type = "big_decimal") private double similarity;
приведет к определению (PostgreSQL, Oracle):
similarity numeric(5, 4), similarity number(5, 4)