J'ai un attribut
private boolean include;
Je voudrais définir sa valeur par défaut à true, afin que dans la base de données il doit afficher True à partir de la valeur par défaut. Est-ce possible dans JPA?
Pour autant que je sache, il n'existe pas de solution JPA native fournissant des valeurs par défaut . Voici ma solution de contournement:
Solution portable sans base de données
@Column(columnDefinition="tinyint(1) default 1")
private boolean include;
Solution orientée Java
private boolean include = true;
Modèle orienté Java plus 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;
}
...
}
Ceci est mon préféré et moins intrusif. Fondamentalement, il délègue à la tâche de définir la valeur par défaut du modèle de générateur de votre entité.
Avec JPA 2.1 et Oracle 11, cela fonctionne pour moi en utilisant le type Oracle NUMBER de taille 1:
Java:
@Column(name = "ENABLED", nullable = false)
private boolean enabled = true;
Créer un script SQL:
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")
);
J'ai constaté que l'ajout dans le constructeur est une bonne solution de contournement pour faire passer de nouvelles entités à une valeur:
public EntityName(){
this.fieldToDefault = default;
}
Vous pouvez toujours utiliser la méthode annotations @PreUpdate
ou @PrePersist
sur laquelle vous allez configurer ce qui doit être fait avant la mise à jour ou avant l'enregistrement dans la base de données.
Ou simplement configurer la valeur private boolean include = true;