@Entity
Was ist der Unterschied zwischen ihnen, wenn sie auf einem Feld / Getter von erscheinen ? (Ich bleibe bei der Entität durch den Ruhezustand ).Zu welchem Framework und / oder welcher Spezifikation gehört jeder von ihnen?
@NotNull
befindet sich innerhalbjavax.validation.constraints
. Imjavax.validation.constraints.NotNull
Javadoc heißt esDas mit Anmerkungen versehene Element darf nicht null sein
Es wird jedoch nicht von der Darstellung des Elements in der Datenbank gesprochen. Warum sollte ich die Einschränkung
nullable=false
der Spalte hinzufügen ?
quelle
@NotNull
,@Size
,@Min
,@Max
etc. und dies in Datenbankbeschränkungen übersetzen.Die neuesten Versionen des JPA-Anbieters im Ruhezustand wenden die Bean-Validierungsbeschränkungen (JSR 303)
@NotNull
standardmäßig wie DDL an (dank der Standardeinstellungenhibernate.validator.apply_to_ddl property
von)true
). Es gibt jedoch keine Garantie dafür, dass andere JPA-Anbieter dies tun oder sogar können.Sie sollten Anmerkungen
@NotNull
zur Bean-Validierung verwenden, um sicherzustellen, dass die Bean-Eigenschaften bei der Validierung von Java-Beans in der JVM auf einen Wert ungleich Null gesetzt werden (dies hat nichts mit Datenbankeinschränkungen zu tun, sollte jedoch in den meisten Situationen diesen entsprechen).Sie sollten zusätzlich die JPA-Annotation verwenden
@Column(nullable = false)
, um dem JPA-Anbieter Hinweise zum Generieren der richtigen DDL zum Erstellen von Tabellenspalten mit den gewünschten Datenbankeinschränkungen zu geben. Wenn Sie sich auf einen JPA-Anbieter wie Hibernate verlassen können oder möchten, der die Bean-Validierungsbeschränkungen standardmäßig auf DDL anwendet, können Sie sie weglassen.quelle
Interessanterweise betonen alle Quellen, dass @Column (nullable = false) nur für die DDL-Generierung verwendet wird.
Selbst wenn keine @ NotNull-Annotation vorhanden ist und die Option hibernate.check_nullability auf true gesetzt ist, führt Hibernate eine Validierung der Entitäten durch, die beibehalten werden sollen.
Es wird eine PropertyValueException ausgelöst, die besagt, dass "Nicht-Null-Eigenschaft auf einen Null- oder Übergangswert verweist", wenn nullable = false-Attribute keine Werte haben, selbst wenn solche Einschränkungen nicht in der Datenbankebene implementiert sind.
Weitere Informationen zur Option hibernate.check_nullability finden Sie hier: http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html#configurations-mapping .
quelle
Die JPA
@Column
AnmerkungDas
nullable
Attribut der@Column
Anmerkung hat zwei Zwecke:Schema-Generierungs-Tool
Das HBM2DDL-Schemagenerierungstool übersetzt das
@Column(nullable = false)
EntitätsattributNOT NULL
beim Generieren derCREATE TABLE
Anweisung in eine Einschränkung für die zugehörige Tabellenspalte .Persistenz-Kontext-Flush
Beim Löschen des Persistenzkontexts verwendet Hibernate ORM auch das
@Column(nullable = false)
Entitätsattribut:Wenn die Validierung fehlschlägt,
PropertyValueException
löst Hibernate ein aus und verhindert, dass die INSERT- oder UPDATE-Anweisung erforderlich ausgeführt wird:Die Bean Validation
@NotNull
AnnotationDie
@NotNull
Annotation wird durch Bean Validation definiert. Genau wie Hibernate ORM die beliebteste JPA-Implementierung ist, ist der Hibernate Validator die beliebteste Bean Validation-Implementierung Framework .Wenn Sie Hibernate Validator zusammen mit Hibernate ORM verwenden, löst Hibernate Validator
ConstraintViolation
bei der Validierung der Entität ein aus.quelle