MySql57Dialect
(dan/atau MySql57InnoDbDialect
, tergantung pada versi Hibernate), TIMESTAMP
Jenis SQL sudah dipetakan ke TIMESTAMP(6)
jenis kolom basis data:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
Ini berarti definisi kolom default harus mendukung presisi mikrodetik. Tindakan terbaik adalah membiarkan Hibernate menghasilkan skema tanpa mengesampingkan definisi kolom. Untuk sebagian besar database lain, itu akan terdegradasi dengan anggun menjadi TIMESTAMP
sederhana .
Jika Anda ingin beralih ke database lain di masa mendatang yang juga mendukung presisi mikrodetik, cari Dialect
yang relevan; kemungkinan akan menyertakan dukungan untuk fitur tersebut, dan jika tidak, Anda selalu dapat menyesuaikannya.
Ini karena di registerColumnType
panggilan di atas, ketepatan TIMESTAMP
diperbaiki pada 6. Jika Anda ingin dapat menyesuaikannya, luncurkan dialek khusus Anda sendiri (meluas dari MySql57Dialect
) dan menimpa definisi dengan:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
Anda kemudian dapat mengganti panjang kolom menggunakan length
, precision
, atau scale
(tergantung pada apa yang Anda masukkan ke dalam tanda kurung). Perhatikan bahwa argumen kedua pada metode mendefinisikan panjang kolom maksimum yang mungkin untuk tipe data khusus ini, jadi jika Anda mau, mis. presisi nanodetik, Anda harus mengubahnya menjadi 9.