MySql57Dialect
(и/или MySql57InnoDbDialect
, в зависимост от версията на Hibernate), TIMESTAMP
SQL типът вече е картографиран към TIMESTAMP(6)
тип колона на базата данни:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
Това означава, че дефиницията на колоната по подразбиране трябва да поддържа микросекунда точност. Най-добрият начин на действие е да позволите на Hibernate да генерира схемата, без да отменя дефиницията на колоната. За повечето други бази данни, тя ще се деградира елегантно до обикновен TIMESTAMP
.
Ако в бъдеще искате да преминете към друга база данни, която също поддържа точност до микросекунди, потърсете съответния Dialect
; вероятно ще включва поддръжка за функцията, а ако не, винаги можете да я персонализирате.
Това е така, защото в registerColumnType
повикване по-горе, точността на TIMESTAMP
е фиксиран на 6. Ако искате да можете да го персонализирате, разгънете свой собствен персонализиран диалект (разширяващ се от MySql57Dialect
) и заменете дефиницията с:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
След това ще можете да замените дължината на колоната, като използвате length
, precision
, или scale
(в зависимост от това какво поставяте в скобите). Обърнете внимание, че вторият аргумент на метода дефинира максималната възможна дължина на колоната за този конкретен тип данни, така че ако искате напр. наносекунда точност, трябва да го промените на 9.