MySql57Dialect
(och/eller MySql57InnoDbDialect
, beroende på versionen av Hibernate), TIMESTAMP
SQL-typen är redan mappad till en TIMESTAMP(6)
databas kolumntyp:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
Detta innebär att standardkolumndefinitionen bör stödja mikrosekundprecision. Det bästa tillvägagångssättet är att låta Hibernate generera schemat utan att åsidosätta kolumndefinitionen. För de flesta andra databaser kommer den att försämras till en enkel TIMESTAMP
.
Om du vill byta till en annan databas i framtiden som också stöder mikrosekundprecision, leta upp den relevanta Dialect
; det kommer troligen att innehålla stöd för funktionen, och om inte kan du alltid anpassa den.
Detta beror på att i registerColumnType
anropet ovan, precisionen för TIMESTAMP
är fast vid 6. Om du vill kunna anpassa den, rulla ut din egen anpassade dialekt (som sträcker sig från MySql57Dialect
) och åsidosätt definitionen med:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
Du kommer då att kunna åsidosätta kolumnlängden med antingen length
, precision
eller scale
(beroende på vad du sätter innanför fästena). Observera att det andra argumentet till metoden definierar den maximala möjliga kolumnlängden för just denna datatyp, så om du vill t.ex. nanosekunders precision bör du ändra den till 9.