Apa perbedaan antara @Basic(optional = false)
dan @Column(nullable = false)
dalam persistensi JPA?
Apa perbedaan antara @Basic(optional = false)
dan @Column(nullable = false)
dalam persistensi JPA?
Jawaban:
Gordon Yorke (Anggota Komite Arsitektur EclipseLink, Pimpinan Teknis Inti TopLink, Anggota Kelompok Pakar JPA 2.0) menulis jawaban yang bagus tentang topik ini jadi alih-alih memparafrasekannya, saya akan mengutip jawabannya :
Perbedaan antara
optional
dannullable
merupakan cakupan di mana mereka dievaluasi. Definisi 'optional
' berbicara tentang properti dan nilai bidang dan menyarankan bahwa fitur ini harus dievaluasi dalam waktu proses. 'nullable
' hanya mengacu pada kolom database.Jika sebuah implementasi memilih untuk mengimplementasikan
optional
maka properti tersebut harus dievaluasi dalam memori oleh Penyedia Persistensi dan pengecualian yang muncul sebelum SQL dikirim ke database jika tidak ketika menggunakan pelanggaran 'updatable=false
' 'optional
' tidak akan pernah dilaporkan.
@Basic(optional = false) @Column(nullable = false)
Anotasi @Basic menandai properti sebagai bukan opsional pada tingkat objek Java. Pengaturan kedua, nullable = false pada pemetaan kolom, hanya bertanggung jawab untuk pembuatan batasan database NOT NULL. Implementasi Hibernate JPA memperlakukan kedua opsi dengan cara yang sama dalam kasus apa pun, jadi Anda sebaiknya hanya menggunakan salah satu anotasi untuk tujuan ini.
The @Basic annotation marks the property as not optional on the Java object level.
Apa artinya? Jadi, @Basic
apakah seperti mengatakan bahwa membuat kolom database NOT NULL
untuk variabel tersebut?
Jadi saya mencoba anotasi @Basic (opsional = false) menggunakan JPA 2.1 (EclipseLink) dan ternyata anotasi tersebut diabaikan dalam penggunaan sebenarnya (setidaknya untuk bidang String). (misalnya panggilan entityManager.persist).
Jadi saya pergi ke spesifikasinya dan membaca tentang itu. Inilah yang dikatakan spesifikasi:
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/
Dasar (opsional): Apakah nilai bidang atau properti boleh nihil. Ini adalah petunjuk dan diabaikan untuk tipe primitif; itu dapat digunakan dalam pembuatan skema.
Jadi saya pikir kalimat ini menjelaskan kasus penggunaan sebenarnya untuk Basic (opsional) yang digunakan dalam pembuatan skema. (Yaitu: ketika Anda membuat CREATE TABLE SQL dari kelas Entitas Java. Ini adalah sesuatu yang dapat dilakukan Hibernate misalnya.)
optional = false
hanya untuk memeriksa batasan ini pada waktu proses. nullable = false
membuat batasan database. Untuk aplikasi, menyetel juga optional = false
masuk akal, karena dievaluasi lebih cepat daripada membuka database dan memeriksa batasan itu di sana ..