Confusion: @NotNull vs @Column (nullable = false)

  1. Quand ils apparaissent sur un champ / getter d’un @Entity , quelle est la différence entre eux? (Je persiste l’entité par Hibernate ).

  2. Quel cadre et / ou spécification appartient à chacun d’entre eux?

  3. @NotNull est situé dans javax.validation.constraints . Dans javax.validation.constraints.NotNull il est écrit:

    L’élément annoté ne doit pas être nul

    mais il ne parle pas de la représentation de l’élément dans la firebase database, alors pourquoi appendais-je la contrainte nullable=false à la colonne?

    @NotNull est une annotation JSR 303 Bean Validation . Cela n’a rien à voir avec les contraintes de la firebase database elle-même. Comme Hibernate est l’implémentation de référence de JSR 303, cependant, elle prend intelligemment en compte ces contraintes et les traduit en contraintes de firebase database. Vous en obtenez donc deux pour le prix d’une. @Column(nullable = false) est le moyen JPA de déclarer une colonne non-null. Ie premier est destiné à la validation et le second à l’indication des détails du schéma de la firebase database. Vous obtenez une aide supplémentaire (et bienvenue!) D’Hibernate sur les annotations de validation.

    Les versions les plus récentes du fournisseur JPA hibernate appliquent les contraintes de validation du bean (JSR 303) comme @NotNull à DDL par défaut (grâce à la hibernate.validator.apply_to_ddl property défaut est true ). Mais rien ne garantit que les autres fournisseurs JPA le font ou ont même la capacité de le faire.

    Vous devez utiliser les annotations de validation du bean comme @NotNull pour vous assurer que les propriétés du bean sont définies sur une valeur non nulle lors de la validation des beans Java dans la JVM (cela n’a rien à voir avec les contraintes de firebase database, mais devrait dans la plupart des cas) .

    Vous devez également utiliser l’annotation JPA comme @Column(nullable = false) pour donner des indications au fournisseur jpa afin de générer le DDL approprié pour créer des colonnes de table avec les contraintes de firebase database souhaitées. Si vous pouvez ou souhaitez vous fier à un fournisseur JPA tel que Hibernate, qui applique les contraintes de validation du bean à DDL par défaut, vous pouvez les omettre.

    Il est intéressant de noter que toutes les sources soulignent que @Column (nullable = false) est utilisé uniquement pour la génération de DDL.

    Cependant, même s’il n’y a pas d’annotation @NotNull et que l’option hibernate.check_nullability est définie sur true, Hibernate effectuera la validation des entités à conserver.

    Il émettra PropertyValueException en disant que “la propriété not-null référence une valeur nulle ou transitoire”, si nullable = false, les atsortingbuts n’ont pas de valeur, même si ces ressortingctions ne sont pas implémentées dans la couche de firebase database.

    Plus d’informations sur l’option hibernate.check_nullability sont disponibles ici: http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html#configurations-mapping .