Нулевое значение связано с тем, что JPA явно вставляет значение null
в этот столбец, если не реализована специальная обработка. columnDefinition
действительно создает столбец с помощью DEFAULT, но не сообщает JPA о его / или не подчиняется впоследствии.
И это столбец, который можно обнулять, поэтому ошибок нет. Посмотрите, что происходит в простом SQL, подумайте об этой таблице:
create table example (
col1 bigint default 42,
col2 bigint default 99
);
Затем сделайте вставку, как:
insert into example (col1) values (null);
затем выберите:
select * from example;
будет показывать результат как:
col1 | col2
------ + ------
(ноль) | 99
Если вам нужно управлять значениями по умолчанию на стороне Java, вам понадобятся некоторые специальные вещи на стороне Java.
См., Например, этот вопрос и обратите внимание, что принятый ответ не рабочий, а этот ответ . Итак, установка значения при создании экземпляра класса:
private Long valueX = 0;
Другой способ, как этот ответ для другого вопроса предполагает использование @PrePersist
:
@PrePersist
void prePersist() {
if (this.valueX == null)
this.valueX = 0;
}