MySql57Dialect (i/lub MySql57InnoDbDialect , w zależności od wersji Hibernate), TIMESTAMP Typ SQL jest już zmapowany na TIMESTAMP(6) typ kolumny bazy danych:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
Oznacza to, że domyślna definicja kolumny powinna obsługiwać precyzję w mikrosekundach. Najlepszym sposobem działania jest pozwolenie Hibernate na generowanie schematu bez nadpisywania definicji kolumny. W przypadku większości innych baz danych obniży się z wdziękiem do prostego TIMESTAMP .
Jeśli chcesz w przyszłości przełączyć się na inną bazę danych, która również obsługuje precyzję mikrosekundową, wyszukaj odpowiedni Dialect; prawdopodobnie będzie obejmować obsługę tej funkcji, a jeśli nie, zawsze możesz ją dostosować.
Dzieje się tak, ponieważ w registerColumnType wywołanie powyżej, precyzja TIMESTAMP jest ustalona na 6. Jeśli chcesz mieć możliwość jego dostosowania, włącz własny niestandardowy dialekt (rozwijający się od MySql57Dialect ) i zastąp definicję:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
Będziesz wtedy mógł nadpisać długość kolumny za pomocą length , precision lub scale (w zależności od tego, co umieścisz w nawiasach). Zauważ, że drugi argument metody definiuje maksymalną możliwą długość kolumny dla tego konkretnego typu danych, więc jeśli chcesz np. precyzja nanosekundowa, należy ją zmienić na 9.