Saya telah menemukan satu solusi lagi yang memungkinkan untuk tidak membuat hardcode cuplikan definisi kolom MySQL di @Column Anda anotasi. Tentukan dialek hibernasi Anda sendiri dengan mengganti org.hibernate.dialect.MySQLDialect :
package org.yourproject;
import java.sql.Types;
import org.hibernate.dialect.MySQL5Dialect;
public class MySQL564PlusDialect extends MySQL5Dialect {
public MySQL564PlusDialect() {
super();
registerColumnType( Types.TIMESTAMP, 6, "datetime($l)" );
}
}
dan tentukan sebagai properti hibernasi hibernate.dialect=org.yourproject.MySQL564PlusDialect (dialek yang ingin Anda perpanjang dapat bervariasi, misalnya org.hibernate.dialect.MySQL5InnoDBDialect sebagai gantinya).
Sekarang Anda dapat menyesuaikan presisi DATETIME dari dalam @Column anotasi dengan menggunakan length atribut:
@Basic(optional=false)
@Column(name="moment", length=3)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getMoment() {
...
yang akan menghasilkan DATETIME(3) definisi kolom yang berarti presisi milidetik. Jika Anda membutuhkan DATETIME simple sederhana (tidak ada pecahan detik), jangan tentukan panjangnya. Anda dapat menggunakan nilai length hingga 6 yang berarti presisi mikrodetik.
Jika Anda menggunakan dialek yang berbeda dari dialek di atas (misalnya org.hibernate.dialect.MySQLDialect standar atau mungkin database lain), yang tidak akan merusak kode Anda:length atribut pada @Column akan diabaikan.
P.S. Akan lebih masuk akal untuk mengeksploitasi precision atribut @Column bukannya length , tetapi penggantian sederhana "datetime($l)" pola dengan "datetime($p)" satu dalam implementasi dialek saya sendiri tidak bekerja begitu saja.