web-dev-qa-db-fra.com

Comment définir la valeur par défaut dans Hibernate

Comment définir la valeur par défaut dans le champ Hibernate?

110
Dejell

Si vous voulez une vraie valeur par défaut pour la base de données, utilisez columnDefinition:

@Column(name = "myColumn", nullable = false, columnDefinition = "int default 100") 

Notez que la chaîne dans columnDefinition dépend de la base de données. De plus, si vous choisissez cette option, vous devez utiliser dynamic-insert. Par conséquent, Hibernate n'inclut pas les colonnes avec des valeurs null à l'insertion. Autrement, parler de défaut n’est pas pertinent.

Mais si vous ne voulez pas la valeur par défaut de la base de données, mais simplement une valeur par défaut dans votre code Java, initialisez simplement votre variable comme ceci - private Integer myColumn = 100;

152
Petar Minchev

qu'en est-il de définir une valeur par défaut pour le champ?

private String _foo = "default";

//property here
public String Foo

s’ils transmettent une valeur, elle sera écrasée, sinon vous avez une valeur par défaut.

27
Tim Hoolihan

Vous pouvez utiliser une annotation @PrePersist et définir la valeur par défaut dans l'étape de pré-persistance.

Quelque chose comme ca:

//... some code
private String myProperty;
//... some code

@PrePersist
public void prePersist() {
    if(myProperty == null) //We set default value in case if the value is not set yet.
        myProperty = "Default value";
}

// property methods
@Column(nullable = false) //restricting Null value on database level.
public String getMyProperty() {
    return myProperty;
}

public void setMyProperty(String myProperty) {
    this.myProperty= myProperty;
}

Cette méthode ne dépend pas du type de base de données/version sous Hibernate. La valeur par défaut est définie avant la persistance de l'objet de mappage. 

23
dbricman

utiliser une annotation en veille prolongée

@ColumnDefault("-1")
private Long clientId;
15
Mazen Embaby

Si vous voulez le faire dans la base de données:

Définissez la valeur par défaut dans la base de données (exemple de serveur SQL):

ALTER TABLE [TABLE_NAME] ADD  CONSTRAINT [CONSTRAINT_NAME]  DEFAULT (newid()) FOR [COLUMN_NAME]

Mappage de fichier en veille prolongée:

    <hibernate-mapping ....
    ...    
    <property name="fieldName" column="columnName" type="Guid" access="field" not-null="false"  insert="false" update="false"  />
    ...

Voir, la clé est insert = "false" update = "false"

6
CSA

La solution fournie ci-dessus pour définir la valeur par défaut à l'aide d'Hibernate 

@Column(name = “myColumn”, nullable = false, columnDefinition = “int default 100")

est spécifique au fournisseur et ne fonctionnera pas pour Oracle.

5
hatellla

Une solution consiste à vérifier votre getter pour voir si la valeur avec laquelle vous travaillez est nulle (ou quel que soit l'état non initialisé) et si elle est égale à cette valeur, renvoyez simplement votre valeur par défaut:

public String getStringValue(){
     return (this.stringValue == null) ? "Default" : stringValue;
}
5
Ian Dallas

Utilisez l'annotation @ColumnDefault(). Ce n'est que hiberner.

4
T3rm1

J'ai cherché cela et trouvé de nombreuses réponses à la valeur par défaut de column.Si vous souhaitez utiliser la valeur par défaut définie dans la table SQL, puis dans l'annotation @column, utilisez"insertable = false". insérable 

@Column (name = nomcolonne, longueur = longueurColonne, insérable = faux)

Si vous utilisez columnDefination, il se peut que l'annotation @Column ne fonctionne pas car elle dépend de la base de données.

4
Garvit Bansal

Vous pouvez utiliser le constructeur de la classe Java pour définir les valeurs par défaut. Par exemple:

public class Entity implements Serializable{
 private Double field1
 private Integer field2;
 private T fieldN;

 public Entity(){
  this.field1=0.0;
  this.field2=0;
  ...
  this.fieldN= <your default value>
 }

 //Setters and Getters
...

}
2
user5507680
<property name="age" type="integer">
<column name="age" not-null="false" default="null" />
</property>
1
Deepak Poojari

je travaille avec Hibernate 5 et Postgres, et cela a fonctionné avec moi. 

@Column (name = "ACCOUNT_TYPE",nullable= false, columnDefinition = "varchar2 default 'END_USER'") @Enumerated (EnumType.STRING) private AccountType accountType;

0
Ala Messaoudi

Si vous souhaitez définir la valeur par défaut en termes de base de données, définissez simplement @Column( columnDefinition = "int default 1")

Mais si vous souhaitez définir une valeur par défaut dans votre application Java, vous pouvez la définir sur votre attribut de classe comme suit: private Integer attribute = 1;

0
Edgencio Da Calista

En travaillant avec Oracle, j'essayais d'insérer une valeur par défaut pour un Enum

J'ai trouvé le suivant pour travailler le meilleur.

@Column(nullable = false)
@Enumerated(EnumType.STRING)
private EnumType myProperty = EnumType.DEFAULT_VALUE;
0
Bojan Petkovic