Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menangani data panjang dengan benar di Hibernate

Dari apa yang saya tahu sebenarnya tidak ada cara bagi Hibernate atau MySQL untuk secara otomatis memotong string tanpa Anda menambahkan logika untuk menangani ini. Alasan mengapa saya percaya bahwa sesuatu seperti ini tidak ada adalah karena saya tidak ingin apa yang saya minta untuk dimasukkan ke dalam database berbeda dari apa yang sebenarnya dimasukkan.

Saya pikir satu-satunya pilihan Anda adalah...

  1. Ubah definisi kolom. Jadikan itu bidang varchar yang lebih besar atau bahkan mungkin bidang teks. Jangan menghabiskan waktu membangun alat ajaib ketika hanya mengubah definisi kolom akan memperbaikinya dalam beberapa klik. Saya sarankan melakukan ini!

  2. Saya bisa melihat Anda menggunakan semacam aspek untuk mencegat setter dan kemudian menyesuaikan ukuran string jika lebih besar dari x panjang. Ini akan menjadi alasan tercepat untuk menanganinya dalam kode Anda. Jika mengubah DB bukanlah pilihan dan Anda memiliki ribuan bidang, ini akan menjadi pilihan saya berikutnya.

  3. Membangun utilitas String class yang dapat mengubah ukuran string Anda...

    setText(String val){this.text =StringUtil.truncate(val,size);}

[PERBARUI] Karena Anda tidak dapat benar-benar memperbarui database, saya akan merekomendasikan aspek untuk mencegat String setter dan memeriksa panjangnya, mungkin terlihat seperti ini (sintaks mungkin mati dan saya tidak menguji ini)...

private static final MAX_SIZE_OF_STRINGS = 255;

@Around("execution(* your.package.*.set*(..)) && args(java.lang.String)")
public void checkAroundSetter(final ProceedingJoinPoint pjp)
    throws Throwable {
    Object[] args = pjp.getArgs();
    for (int i = 0; i < args.length; i++) {
        if (args[i] instanceof String && ((String) args[i]).size() > MAX_SIZE_OF_STRINGS) {
            args[i] = ((String)args[i]).subString(0,MAX_SIZE_OF_STRINGS) ;
        }
    }
    pjp.proceed(args);
}

Juga, akan ada beberapa overhead tambahan jika beberapa lapisan harus memeriksa ukuran kolom yang ditentukan terhadap semua data yang masuk ke tabel pada setiap sisipan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengambil data dari database MySQL ke daftar dropdown html

  2. count(*) dan count(column_name), apa bedanya?

  3. kembalikan satu nilai dari database dengan mysql php pdo

  4. Bagaimana cara menjatuhkan unik di MySQL?

  5. ekstrak mysql tahun dari format tanggal