web-dev-qa-db-fra.com

Comment définir la valeur booléenne par défaut dans JPA

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?

23
Andre Coetzee

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")
);
4
Daniel Mora

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;
}
0
Alan Faz

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;

0
Milkmaid