Quando eles aparecem em um campo / captador de um
@Entity
, qual é a diferença entre eles? (Eu persisto a Entidade através do Hibernate ).A qual estrutura e / ou especificação cada uma delas pertence?
@NotNull
está localizado dentrojavax.validation.constraints
. Nojavax.validation.constraints.NotNull
javadoc dizO elemento anotado não deve ser nulo
mas não fala da representação do elemento no banco de dados, por que eu adicionaria a restrição
nullable=false
à coluna?
fonte
@NotNull
,@Size
,@Min
,@Max
, etc., e traduzi-los em restrições de banco de dados.As versões mais recentes do provedor JPA de hibernação aplicam as restrições de validação de bean (JSR 303) como
@NotNull
DDL por padrão (graças aoshibernate.validator.apply_to_ddl property
padrões detrue
). Mas não há garantia de que outros fornecedores de JPA façam ou tenham a capacidade de fazer isso.Você deve usar anotações de validação de bean como
@NotNull
para garantir que as propriedades do bean sejam configuradas com um valor nulo ao validar java beans na JVM (isso não tem nada a ver com restrições de banco de dados, mas na maioria das situações deve corresponder a elas).Além disso, você deve usar a anotação JPA
@Column(nullable = false)
para fornecer dicas ao provedor jpa para gerar a DDL correta para criar colunas da tabela com as restrições de banco de dados desejadas. Se você pode ou deseja confiar em um provedor de JPA como o Hibernate, que aplica as restrições de validação de bean ao DDL por padrão, você pode omiti-las.fonte
É interessante notar que todas as fontes enfatizam que @Column (nulo = falso) é usado apenas para geração de DDL.
No entanto, mesmo se não houver anotação @NotNull e a opção hibernate.check_nullability estiver configurada como true, o Hibernate executará a validação das entidades a serem persistidas.
Ele lançará PropertyValueException dizendo que "a propriedade not-null faz referência a um valor nulo ou transitório", se os atributos nullable = false não tiverem valores, mesmo que essas restrições não sejam implementadas na camada do banco de dados.
Mais informações sobre a opção hibernate.check_nullability estão disponíveis aqui: http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html#configurations-mapping .
fonte
A APP
@Column
anotaçãoO
nullable
atributo da@Column
anotação tem dois propósitos:Ferramenta de geração de esquema
A ferramenta de geração de esquema HBM2DDL converte o
@Column(nullable = false)
atributo de entidade em umaNOT NULL
restrição para a coluna da tabela associada ao gerar aCREATE TABLE
instrução.Liberação de contexto de persistência
Ao liberar o contexto de persistência, o Hibernate ORM também usa o
@Column(nullable = false)
atributo de entidade:Se a validação falhar, o Hibernate lançará
PropertyValueException
ae impedirá que a instrução INSERT ou UPDATE seja executada desnecessariamente:A
@NotNull
anotação de validação de beanA
@NotNull
anotação é definida pelo Bean Validation e, assim como o Hibernate ORM é a implementação JPA mais popular, a implementação mais popular do Bean Validation é o Hibernate Validator estrutura .Ao usar o Hibernate Validator junto com o Hibernate ORM, o Hibernate Validator emitirá um
ConstraintViolation
ao validar a entidade.fonte