Kiedy pojawiają się na polu / polu pobierania
@Entity
, jaka jest między nimi różnica? (Utrzymuję Entity poprzez Hibernację ).Do jakiej struktury i / lub specyfikacji należy każdy z nich?
@NotNull
znajduje się w obrębiejavax.validation.constraints
. Wjavax.validation.constraints.NotNull
javadoc jest napisaneElement z adnotacjami nie może mieć wartości NULL
ale nie mówi o reprezentacji elementu w bazie danych, więc dlaczego miałbym dodawać ograniczenie
nullable=false
do kolumny?
źródło
@NotNull
,@Size
,@Min
,@Max
, itd., A te przekładają się ograniczeń baz danych.Najnowsze wersje dostawcy hibernacji JPA
@NotNull
domyślnie stosują ograniczenia sprawdzania fasoli (JSR 303), takie jak DDL (dziękihibernate.validator.apply_to_ddl property
domyślnemu ustawieniutrue
). Ale nie ma gwarancji, że inni dostawcy JPA to robią, a nawet mają taką możliwość.Powinieneś używać adnotacji sprawdzania poprawności komponentów bean,
@NotNull
aby upewnić się, że właściwości komponentu bean są ustawione na wartość zerową, podczas sprawdzania poprawności ziaren Java w JVM (nie ma to nic wspólnego z ograniczeniami bazy danych, ale w większości przypadków powinny być z nimi zgodne).Dodatkowo należy użyć adnotacji JPA, takiej jak
@Column(nullable = false)
wskazówki dla dostawcy jpa, aby wygenerować odpowiedni DDL do tworzenia kolumn tabeli z żądanymi ograniczeniami bazy danych. Jeśli możesz lub chcesz polegać na dostawcy JPA, takim jak Hibernate, który domyślnie stosuje ograniczenia sprawdzania fasoli do DDL, możesz je pominąć.źródło
Co ciekawe, wszystkie źródła podkreślają, że @Column (nullable = false) jest używany tylko do generowania DDL.
Jednak nawet jeśli nie ma adnotacji @NotNull, a opcja hibernacji.check_nullability jest ustawiona na wartość true, Hibernacja przeprowadzi weryfikację jednostek, które mają zostać utrwalone.
Zgłasza wyjątek PropertyValueException, mówiąc, że „właściwość niezerowa odwołuje się do wartości zerowej lub przejściowej”, jeśli atrybuty zerowalne = fałszywe nie mają wartości, nawet jeśli takie ograniczenia nie są zaimplementowane w warstwie bazy danych.
Więcej informacji o opcji hibernacji.check_nullability można znaleźć tutaj: http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html#configurations-mapping .
źródło
@Column
Adnotacja JPAnullable
Atrybut@Column
adnotacji ma dwa cele:Narzędzie do generowania schematów
Narzędzie do generowania schematu HBM2DDL tłumaczy
@Column(nullable = false)
atrybut encji naNOT NULL
ograniczenie dla powiązanej kolumny tabeli podczas generowaniaCREATE TABLE
instrukcji.Kontekst utrzymywania koloru
Podczas opróżniania kontekstu trwałości Hibernacja ORM używa również
@Column(nullable = false)
atrybutu encji:Jeśli sprawdzanie poprawności się nie powiedzie, Hibernacja rzuci a
PropertyValueException
i uniemożliwi wykonanie instrukcji INSERT lub UPDATE:@NotNull
Adnotacja walidacji komponentu Bean@NotNull
Adnotacja jest zdefiniowany przez Bean Validation i, podobnie jak Hibernate ORM jest najpopularniejszym wdrażanie WZP, najpopularniejszy realizacja Bean Validation jest Hibernate Validator ramy.Podczas korzystania z Hibernacji Walidatora wraz z Hibernacją ORM, Hibernacja Walidatora wyrzuci a
ConstraintViolation
podczas sprawdzania poprawności jednostki.źródło