У меня есть атрибут
private boolean include;
Я хотел бы установить его значение по умолчанию равным true, так что в базе данных он должен отображать True по умолчанию. Возможно ли это в JPA?
У меня есть атрибут
private boolean include;
Я хотел бы установить его значение по умолчанию равным true, так что в базе данных он должен отображать True по умолчанию. Возможно ли это в JPA?
Насколько я знаю, нет встроенного решения 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 в вашей сущности.
Используя 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")
);
Я обнаружил, что добавление в конструкторе является хорошим обходным путем для новых объектов по умолчанию:
public EntityName(){
this.fieldToDefault = default;
}
Вы всегда можете использовать аннотации @PreUpdate
или @PrePersist
для метода, в котором вы будете устанавливать, что нужно сделать перед обновлением или перед сохранением в БД.
Или просто установите значение private boolean include = true;
Возможно будет полезен людям, которые работают с Microsoft SQL SERVER
@Column(columnDefinition="bit default 0")
private Boolean active;
Возможные значения: 0 или 1
private boolean include = true;