, поскольку null
также является значением:
Что происходит в коде?
При звонке:
private Integer myAttribute;
значение по умолчанию null
, потому что Integer является объектом. поэтому, когда вы пытаетесь вставить нулевое значение, даже если DEFAULT 0
JPA установит null
в myAttribute
, запрос должен выглядеть так:
INSERT INTO table0002 values (null);
.. и когда вы ВСТАВЛЯЕТЕ null
, проверьте, что происходит в демоверсии:
https://rextester.com/IJUT84677
значение вставлено! с null
, а не с 0
.
Теперь давайте попробуем другой INSERT без указания my_attribute
в запросе:
https://rextester.com/FGASH67830
Мы не указываем my_attribute
в запросе, поэтому используется значение по умолчанию. в документации сказано:
5,2. Значения по умолчанию
Столбцу может быть назначено значение по умолчанию. Когда создается новая строка
и не указаны значения для некоторых столбцов, эти столбцы
будут заполнены соответствующими значениями по умолчанию . Данные
Команда манипуляции также может явно запросить, чтобы столбец был установлен
к значению по умолчанию
Чтобы решить эту проблему, вы можете просто использовать:
private Integer myAttribute = 0; // set hard value in the code
Кроме того, вы также можете использовать NOT NULL
, чтобы убедиться, что запрос не будет вставлять NULL:
my_attribute INTEGER NOT NULL DEFAULT 0
это может вызвать violates not-null constraint
, поэтому будьте осторожны, вы должны установить значение по умолчанию, отличное от NULL, при вызове вставки, проверьте, что вы получите, если попытаетесь это сделать.
https://rextester.com/LMTTOO35342