Подтвердить что ты не робот

Как установить логическое значение по умолчанию в JPA

У меня есть атрибут

private boolean include;

Я хотел бы установить его значение по умолчанию равным true, так что в базе данных он должен отображать True по умолчанию. Возможно ли это в JPA?

4b9b3361

Ответ 1

Насколько я знаю, нет встроенного решения JPA для предоставления значений по умолчанию. Вот оно мое решение:

Портативное решение без базы данных

@Column(columnDefinition="tinyint(1) default 1")
private boolean include;

Java-ориентированное решение

private boolean include = true;

Java-ориентированный плюс шаблон Builder

     @Column(nullable = false)
     private Boolean include;
     ...
     public static class Builder {
      private Boolean include = true; // Here it comes your default value
      public Builder include (Boolean include ) {
      this.include = include ;
      return this;
     }
     // Use the pattern builder whenever you need to persist a new entity.
     public MyEntity build() {
       MyEntity myEntity = new MyEntity ();
       myEntity .setinclude (include );
       return myEntity;
      }
...
}

Это мой любимый и менее навязчивый. В основном это делегирует задачу определить значение по умолчанию для шаблона Builder в вашей сущности.

Ответ 2

Используя JPA 2.1 и Oracle 11, это работает для меня с использованием Oracle типа NUMBER размера 1:

Java:

@Column(name = "ENABLED", nullable = false)
private boolean enabled = true;

Создать SQL script:

CREATE TABLE "ACCOUNT"(
"ID" NUMBER(10,0) NOT NULL ENABLE,
"NAME" VARCHAR2(255 CHAR) NOT NULL ENABLE,
"PASSWORD" VARCHAR2(255) NOT NULL ENABLE,
"ENABLED" NUMBER(1,0) DEFAULT 1 NOT NULL ENABLE,
PRIMARY KEY ("ID")
);

Ответ 3

Я обнаружил, что добавление в конструкторе является хорошим обходным путем для новых объектов по умолчанию:

public EntityName(){
    this.fieldToDefault = default;
}

Ответ 4

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

Или просто установите значение private boolean include = true;

Ответ 5

Возможно будет полезен людям, которые работают с Microsoft SQL SERVER

    @Column(columnDefinition="bit default 0")
    private Boolean active;

Возможные значения: 0 или 1

Ответ 6

private boolean include = true;