web-dev-qa-db-fra.com

Quelle est la différence entre @ManyToOne (facultatif = false) et @Column (nullable = false)

Dans JPA, je ne sais pas quand utiliser l'attribut optional=false Et l'annotation @Column(nullable=false). Quelle est la différence?

51
Truong Ha

@Column(nullable=false) est une instruction pour générer le schéma. La colonne de base de données générée à partir de la classe sera marquée comme non annulable dans la base de données réelle.

optional=false est une instruction d'exécution. La principale fonction fonctionnelle qu'il effectue est liée au chargement différé. Vous ne pouvez pas paresseusement charger une entité mappée non-collection à moins que vous vous souveniez de définir optional = false (car Hibernate ne sait pas s'il doit y avoir un proxy ou un null, sauf si vous lui dites que les null sont impossibles, il peut donc générer un proxy.)

85
Affe

Les deux sont utilisés pour empêcher une valeur nulle, mais si cela vous dérange, cette valeur doit être bloquée dans ...

La couche base de données (et vous souhaitez générer le schéma à l'aide de JPA) -> utilisez @Column(nullable=false)

à l'exécution (et avant de contacter la base de données) -> utilisez optional=false (beaucoup plus rapide que la première vérification).

Si vous voulez les deux capacités, utilisez-les toutes les deux.

0
O.Badr