Comment définir une valeur par défaut dans un champ Hibernate ?
Avec des annotations : @org.hibernate.annotations.Entity(dynamicInsert = true)
Comment définir une valeur par défaut dans un champ Hibernate ?
Si vous souhaitez une valeur par défaut réelle pour la base de données, utilisez columnDefinition
:
@Column(name = "myColumn", nullable = false, columnDefinition = "int default 100")
Remarquez que la chaîne de caractères dans columnDefinition
dépend de la base de données. De plus, si vous choisissez cette option, vous devez utiliser dynamic-insert
Ainsi Hibernate
n'inclut pas les colonnes avec null
lors de l'insertion. Autrement, parler de valeur par défaut n'est pas pertinent.
Mais si vous ne voulez pas de valeur par défaut de 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;
Actuellement org.hibernate.annotations.Entity
est obsolète. @DynamicInsert
doit être utilisée à la place.
Je ne recommanderais pas l'utilisation de columnDefinition dans cette situation, car elle n'est pas transférable d'une base de données à une autre, et vous devez connaître le langage SQL spécifique de votre serveur.
Vous pouvez utiliser @PrePersist
et fixer la valeur par défaut au stade de la pré-persistance.
Quelque chose comme ça :
//... 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 la version de la base de données sous Hibernate. La valeur par défaut est définie avant la persistance de l'objet de mappage.
Étant donné que setMyProperty
n'est pas utilisé dans votre exemple. Pourquoi l'incluez-vous ?
Si vous voulez le faire dans une base de données :
Définir 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]
Cartographie du fichier hibernate :
<hibernate-mapping ....
...
<property name="fieldName" column="columnName" type="Guid" access="field" not-null="false" insert="false" update="false" />
...
La clé est insert="false" update="false"
J'utilise un mapper qui appelle le setter sur mon objet entité. Y a-t-il un inconvénient à utiliser votre extrait de code à la fois sur le getter et le setter ?
J'utilise Spring Boot. Dans cette classe d'entité, j'ai essayé de faire ceci : > private Long trianglesCount ; @Column(name = "triangles_count") public Long getTrianglesCount() { if(this.trianglesCount == null) return 0L ; else return this.trianglesCount ; } this ne sauvegarde pas 0L par défaut. il sauvegarde null dans la db.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
3 votes
Utilisez-vous le fichier de configuration XML ou des annotations ?
2 votes
La réponse ci-dessous ne donne que des solutions JPA, ce qui est correct, mais pour une solution Hibernate, voir stackoverflow.com/questions/28107554/ vous devez utiliser
@ColumnDefault