Perbedaan Antara @Size, @Length, dan @Column (length = value)

1. Ikhtisar

Dalam tutorial ini cepat, kita akan melihat di JSR-330 ini @Size , Hibernate @Length dan JPA @column 's panjang atribut.

Sekilas, ini mungkin tampak sama, tetapi fungsinya berbeda . Mari kita lihat caranya.

2. Asal Usul

Sederhananya, semua anotasi ini dimaksudkan untuk mengomunikasikan ukuran bidang.

@Size dan @Length serupa. Kita dapat menggunakan salah satunya untuk memvalidasi ukuran bidang. Yang pertama adalah anotasi standar Java dan yang kedua khusus untuk Hibernate.

@Column , meskipun, adalah anotasi JPA yang kita gunakan untuk mengontrol pernyataan DDL.

Sekarang, mari kita bahas masing-masing secara mendetail.

3. @Ukuran

Untuk validasi, kita akan menggunakan @Size , anotasi validasi bean. Mari gunakan properti middleName yang dianotasi dengan @Size untuk memvalidasi nilainya antara atribut min dan max:

public class User { // ... @Size(min = 3, max = 15) private String middleName; // ... }

Yang terpenting, @Size membuat bean independen dari JPA dan vendornya seperti Hibernate . Hasilnya, ini lebih portabel daripada @Length .

4. @ Panjang

Dan seperti yang baru saja kami nyatakan, @Length adalah versi khusus Hibernate dari @Size. Mari kita terapkan kisaran untuk lastName menggunakan @Length :

@Entity public class User { // ... @Length(min = 3, max = 15) private String lastName; // ... }

5. @Column (panjang = nilai)

@Column , bagaimanapun, sangat berbeda.

Kami akan menggunakan @Column untuk menunjukkan karakteristik spesifik dari kolom database fisik. Mari gunakan atribut panjang dari anotasi @Column untuk menentukan panjang kolom bernilai string:

@Entity public class User { @Column(length = 3) private String firstName; // ... }

Akibatnya, kolom yang dihasilkan akan dihasilkan sebagai VARCHAR (3) dan mencoba memasukkan string yang lebih panjang akan menghasilkan kesalahan SQL.

Perhatikan bahwa kami akan menggunakan @Column hanya untuk menentukan properti kolom tabel karena tidak memberikan validasi.

Tentu saja, kita bisa menggunakan @Column bersama dengan @Size untuk menentukan properti kolom database dengan validasi bean.

@Entity public class User { // ... @Column(length = 5) @Size(min = 3, max = 5) private String city; // ... }

6. Kesimpulan

Dalam menulis-up ini, kami belajar tentang perbedaan antara @Size penjelasan, @Length penjelasan dan @column 's panjang atribut. Kami memeriksa masing-masing secara terpisah dalam area penggunaannya.

Seperti biasa, kode sumber lengkap dari contoh tersedia di GitHub.