Ketika mereka muncul di bidang / pengambil sebuah
@Entity
, apa perbedaan di antara mereka? (Saya bertahan Entitas melalui Hibernate ).Kerangka kerja dan / atau spesifikasi apa yang dimiliki masing-masing?
@NotNull
terletak di dalamjavax.validation.constraints
. Dijavax.validation.constraints.NotNull
javadoc dikatakanElemen beranotasi tidak boleh nol
tetapi tidak berbicara tentang representasi elemen dalam database, jadi mengapa saya menambahkan kendala
nullable=false
ke kolom?
242
@NotNull
,@Size
,@Min
,@Max
, dll, dan menerjemahkan ke dalam kendala database.Versi terbaru dari penyedia JPA hibernasi menerapkan batasan validasi bean (JSR 303) seperti
@NotNull
untuk DDL secara default (terima kasih kepadahibernate.validator.apply_to_ddl property
default untuktrue
). Tetapi tidak ada jaminan bahwa penyedia JPA lain melakukan atau bahkan memiliki kemampuan untuk melakukan itu.Anda harus menggunakan anotasi validasi kacang
@NotNull
untuk memastikan, bahwa properti kacang diatur ke nilai tidak-nol, ketika memvalidasi kacang java di JVM (ini tidak ada hubungannya dengan kendala basis data, tetapi dalam kebanyakan situasi harus sesuai dengan mereka).Anda juga harus menggunakan anotasi JPA seperti
@Column(nullable = false)
untuk memberikan petunjuk penyedia jpa untuk menghasilkan DDL yang tepat untuk membuat kolom tabel dengan batasan database yang Anda inginkan. Jika Anda bisa atau ingin mengandalkan penyedia JPA seperti Hibernate, yang menerapkan batasan validasi bean ke DDL secara default, maka Anda bisa menghilangkannya.sumber
Menarik untuk dicatat, semua sumber menekankan bahwa @Column (nullable = false) hanya digunakan untuk generasi DDL.
Namun, bahkan jika tidak ada penjelasan @NotNull, dan opsi hibernate.check_nullability disetel ke true, Hibernate akan melakukan validasi entitas yang akan dipertahankan.
Ini akan melempar PropertyValueException mengatakan bahwa "properti tidak-nol merujuk nilai nol atau sementara", jika nullable = atribut palsu tidak memiliki nilai, bahkan jika pembatasan tersebut tidak diterapkan pada lapisan database.
Informasi lebih lanjut tentang opsi hibernate.check_nullability tersedia di sini: http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html#configurations-mapping .
sumber
JPA
@Column
AnotasiThe
nullable
atribut dari@Column
penjelasan memiliki dua tujuan:Alat Pembuatan Skema
Alat pembuatan skema HBM2DDL menerjemahkan
@Column(nullable = false)
atribut entitas keNOT NULL
kendala untuk kolom tabel terkait saat membuatCREATE TABLE
pernyataan.Persistensi Konteks Flush
Saat membilas Konteks Kegigihan, Hibernate ORM juga menggunakan
@Column(nullable = false)
atribut entitas:Jika validasi gagal, Hibernate akan melempar a
PropertyValueException
, dan mencegah pernyataan INSERT atau UPDATE untuk dieksekusi dengan perlu:@NotNull
Anotasi Validasi BeanThe
@NotNull
penjelasan didefinisikan oleh Bean Validasi dan, seperti Hibernate ORM yang paling populer implementasi JPA, yang paling populer pelaksanaan Bean Validasi adalah Hibernate Validator kerangka.Saat menggunakan Hibernate Validator bersama dengan Hibernate ORM, Hibernate Validator akan melempar
ConstraintViolation
ketika memvalidasi entitas.sumber