Значение по умолчанию, объявленное в JPA @Column (columnDefinition ...), не устанавливается при сохранении - PullRequest
0 голосов
/ 06 января 2019

У меня есть атрибут в моей сущности Java, такой как:

@Basic(fetch = FetchType.LAZY) //I tried without this as well
@Column(name = "value_x", columnDefinition = "bigint default 0")
private Long valueX;

В определении таблицы в pgAdmin я вижу:

value_x bigint DEFAULT 0,

но когда объект вставлен (с этим атрибутом, равным нулю), столбец будет пустым / пустым, не вставив значение 0.

Кто-нибудь может знать, почему он не вставляет значение по умолчанию? Использование EclipseLink.

1 Ответ

0 голосов
/ 07 января 2019

Нулевое значение связано с тем, что 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;
}
...