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.