JPA EclipseLink: обрабатывать значение по умолчанию - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующее определение столбца:

@Column(name="active", nullable=false, columnDefinition="BOOLEAN DEFAULT FALSE"
private Boolean active;

В базе данных Postgres столбец active определяется как BOOLEAN NOT NULL DEFAULT FALSE

Но когда я вставляю новую запись, без настройкиactive, EclipseLink генерирует значение null для этого поля, и оператор вставки явно не выполняется, поскольку Postgres не допускает значение null для столбца NOT NULL.

Что я делаю не так?

Что ж, если я определю свое поле как

private boolean active;

, тогда я косвенно установлю для поля значение false.Но я не могу использовать этот трюк с полями Date.Итак, я ищу решение, которое будет работать для всех типов столбцов.

1 Ответ

0 голосов
/ 10 октября 2018

columnDefinition используется только для создания DDL и может зависеть от базы данных.Вот почему вы не сможете переключить БД, если будете его использовать.

Использование типов примитивов гарантирует, что значение не равно нулю, и без явного определения значения используется значение по умолчанию примитивов.Однако вы также можете определить значения по умолчанию для непримитивных значений, назначив их: private Boolean active = false; Это также будет работать с Date.

Когда вам нужны сложные значения по умолчанию, вы можете использовать аннотацию PrePersist:

    @PrePersist
    public void setDeafaultvalues() {
        if (active == null) {
            active = false;
        }
        if (value == null) {
           //do complex stuff
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...