J'ai une entité annotée avec @Entity
.
Si je suis responsable de la création des scripts CREATE TABLE
Pourquoi devrais-je spécifier @Column( nullable = false )
quand je peux créer une colonne dans la base de données avec les mots clés NOT NULL
? Y a-t-il un exemple qui montre les avantages de l'utilisation de cette propriété dans un champ?
Amélioration des messages d'erreur et de la gestion des erreurs, surtout si vous ajoutez également JSR303 @NotNull annotation .
Si vous créez la colonne en tant que NOT NULL
mais ne dites pas à JPA qu'il n'est pas nul, JPA supposera que les valeurs nulles sont OK. Lorsque vous essayez d'enregistrer un objet avec des valeurs nulles, il procédera à l'envoi à la base de données et vous obtiendrez une erreur de niveau de base de données. Cela augmente le spam de journaux dans la base de données et il est beaucoup plus difficile de déterminer à partir de l'erreur quelle (s) colonne (s) de quelle (s) table (s) sont à l'origine du problème, et encore moins de les mapper à leurs noms JPA.
Si vous les annotez comme non nulles, JPA lèvera une exception avant l'enregistrement, évitant le spam de journal de base de données et vous donnant généralement une meilleure erreur. En particulier, si votre fournisseur JPA prend en charge JSR303 et traduit soit nullable=false
en @NotNull
en interne ou vous avez ajouté @NotNull
aussi, il vous donnera une structure de données que vous pouvez examiner pour voir exactement quels champs de quels objets ont été rejetés pour quelles raisons, ainsi que des messages d'erreur personnalisables.
C'est pourquoi vous devez informer JPA de NOT NULL
des champs. Cela, et il est plus facile pour les autres utilisateurs de votre code de comprendre sans avoir à lire le schéma de base de données.
De plus, si votre colonne contient nullable = false
dans @ManyToOne
annotation, Hibernate fait INNER JOIN requête vers la table associée. nullable = true
donne le résultat LEFT JOIN.
C'est une autre différence.
Dans votre cas, il pourrait ne pas y avoir d'avantage réel, mais: