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.