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.