JPA @ Anotasi Dasar

1. Ikhtisar

Dalam tutorial singkat ini, kita akan menjelajahi anotasi JPA @Basic . Kami juga akan membahas perbedaan antara anotasi @Basic dan @Column JPA.

2. Jenis Dasar

JPA mendukung berbagai tipe data Java sebagai bidang tetap dari suatu entitas, sering kali dikenal sebagai tipe dasar.

Tipe dasar memetakan langsung ke kolom dalam database. Ini termasuk primitif Java dan kelas pembungkusnya, String , java.math.BigInteger dan java.math.BigDecimal , berbagai kelas tanggal-waktu yang tersedia, enum, dan jenis lain yang mengimplementasikan java.io.Serializable .

Hibernate, seperti vendor ORM lainnya, memelihara registry tipe dasar dan menggunakannya untuk menyelesaikan kolom tertentu org.hibernate.type.Type .

3. Anotasi @Dasar

Kita bisa menggunakan anotasi @Basic untuk menandai properti tipe dasar:

@Entity public class Course { @Basic @Id private int id; @Basic private String name; ... }

Dengan kata lain, para @Basic penjelasan di lapangan atau menandakan properti yang itu adalah jenis dasar dan Hibernate harus menggunakan pemetaan standar untuk ketekunan.

Perhatikan bahwa ini adalah anotasi opsional. Jadi, kita dapat menulis ulang entitas Kursus kita sebagai:

@Entity public class Course { @Id private int id; private String name; ... }

Saat kita tidak menentukan anotasi @Basic untuk atribut tipe dasar, ini diasumsikan secara implisit, dan nilai default dari anotasi ini berlaku.

4. Mengapa Menggunakan Anotasi @Dasar ?

The @Basic penjelasan memiliki dua atribut, opsional dan mengambil . Mari kita lihat lebih dekat satu per satu.

The opsional atribut adalah boolean parameter yang mendefinisikan apakah bidang yang ditandai atau properti memungkinkan nol . Ini defaultnya benar . Jadi, jika kolom tersebut bukan tipe primitif, kolom yang mendasarinya dianggap nullable secara default.

The mengambil atribut menerima anggota dari pencacahan Fetch , yang Menentukan apakah bidang yang ditandai atau properti harus malas dimuat atau bersemangat diambil. Standarnya FetchType.EAGER , tapi kami dapat mengizinkan lazy loading dengan menetapkan ke FetchType.LAZY.

Pemuatan lambat hanya akan masuk akal jika kita memiliki objek berseri besar yang dipetakan sebagai tipe dasar, seperti dalam kasus tersebut, biaya akses lapangan bisa menjadi signifikan.

Kami memiliki tutorial mendetail yang mencakup Eager / Lazy loading dalam Hibernate yang membahas topik ini lebih dalam.

Sekarang, mari kita mengatakan tidak ingin mengizinkan nulls untuk kami Course 's nama dan ingin beban malas bahwa properti juga. Kemudian, kami akan mendefinisikan entitas Kursus kami sebagai:

@Entity public class Course { @Id private int id; @Basic(optional = false, fetch = FetchType.LAZY) private String name; ... }

Kita harus secara eksplisit menggunakan anotasi @Basic ketika ingin menyimpang dari nilai default parameter opsional dan ambil . Kita dapat menentukan salah satu atau kedua atribut ini, tergantung kebutuhan kita.

5. JPA @Basic vs @Column

Penampilan Mari kita lihat perbedaan antara @Basic dan @column penjelasan:

  • Atribut anotasi @Basic diterapkan ke entitas JPA, sedangkan atribut @Column diterapkan ke kolom database
  • Atribut opsional anotasi dasar menentukan apakah bidang entitas bisa kosong atau tidak; di sisi lain, atribut nullable anotasi @Column menentukan apakah kolom database terkait bisa null
  • Kita bisa menggunakan @Basic untuk menunjukkan bahwa bidang harus dimuat secara lambat
  • The @column penjelasan memungkinkan kita untuk menentukan nama kolom database dipetakan

6. Kesimpulan

Dalam artikel ini, kami mempelajari kapan dan bagaimana menggunakan anotasi @Basic JPA . Kami juga membicarakan tentang perbedaannya dengan anotasi @Column .

Seperti biasa, contoh kode tersedia di Github.