MySql57Dialect
(a/nebo MySql57InnoDbDialect
, v závislosti na verzi Hibernate), TIMESTAMP
Typ SQL je již namapován na TIMESTAMP(6)
typ sloupce databáze:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
To znamená, že výchozí definice sloupce by měla podporovat mikrosekundovou přesnost. Nejlepším postupem je nechat Hibernate vygenerovat schéma bez přepsání definice sloupce. U většiny ostatních databází se elegantně sníží na jednoduchý TIMESTAMP
.
Pokud budete chtít v budoucnu přejít na jinou databázi, která rovněž podporuje mikrosekundovou přesnost, vyhledejte příslušný Dialect
; pravděpodobně bude zahrnovat podporu pro tuto funkci, a pokud ne, vždy si ji můžete přizpůsobit.
Je to proto, že v registerColumnType
výše, přesnost TIMESTAMP
je pevně stanovena na 6. Pokud si ji chcete přizpůsobit, zaveďte svůj vlastní dialekt (rozšiřující se z MySql57Dialect
) a přepište definici pomocí:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
Poté budete moci přepsat délku sloupce pomocí buď length
, precision
nebo scale
(podle toho, co vložíte do závorek). Všimněte si, že druhý argument metody definuje maximální možnou délku sloupce pro tento konkrétní datový typ, takže pokud chcete např. přesnost nanosekund, měli byste ji změnit na 9.