Ini karena panjang default VARCHAR
kolom dalam pernyataan DDL yang dibuat oleh sebagian besar penyedia JPA (termasuk Hibernate dan EclipseLink) adalah 255. Menentukan length
atribut ke @Column
anotasi membantu menimpa nilai, sehingga nilai baru diambil oleh generator skema penyedia JPA.
Ini adalah asumsi yang salah. Penyedia JPA akan membuat tabel hanya sekali, dan tidak akan secara dinamis mengubah panjang tabel yang mendasarinya selama masa pakai aplikasi, dan hanya jika Anda mengonfigurasi penyedia untuk membuat/memperbarui definisi tabel di tempat pertama. Selain itu, pemetaan default String
adalah SQL VARCHAR
ketik.
Anda tampaknya telah mengonfigurasi penyedia JPA untuk membuat tabel sesuai kebutuhan (setelah mungkin menjatuhkannya), selama proses inisialisasi. Jika Anda menggunakan Hibernate, ini dilakukan dengan menggunakan hibernate.hbm2ddl.auto
properti yang ditentukan dalam persistence.xml
dengan nilai update
, create
atau create-drop
. Dengan EclipseLink, Anda akan menentukan properti eclipselink.ddl-generation
dengan nilai create-tables
atau drop-and-create-tables
.
Kedua properti di atas tidak disarankan untuk digunakan dalam produksi lingkungan
. Pendekatan yang ideal adalah memiliki skrip DDL untuk membuat tabel. Karena, Anda menggunakan VARCHAR
, Anda harus menentukan panjang yang sesuai dalam definisi kolom, agar sesuai dengan panjang maksimum input pengguna . Selain itu, karena Anda menggunakan VARCHAR
lebih dari CHAR
, mesin database akan memastikan bahwa ruang penyimpanan yang dialokasikan akan bergantung pada ukuran catatan yang disimpan.
Jika Anda tidak memerlukan String ke default VARCHAR
pemetaan dan alih-alih menggunakan pemetaan lain yang valid, maka Anda harus menggunakan columnDefinition
atribut @Column
anotasi. Contoh penggunaan untuk pemetaan Calendar
ke TIMESTAMPTZ
Tipe data SQL ditampilkan di JPA WikiBook
; Anda harus memodifikasi ini agar sesuai dengan kebutuhan Anda.