MySql57Dialect
(und/oder MySql57InnoDbDialect
, je nach Version von Hibernate), den TIMESTAMP
Der SQL-Typ ist bereits einem TIMESTAMP(6)
zugeordnet Datenbankspaltentyp:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
Dies bedeutet, dass die Standardspaltendefinition die Genauigkeit im Mikrosekundenbereich unterstützen sollte. Die beste Vorgehensweise besteht darin, Hibernate das Schema generieren zu lassen, ohne die Spaltendefinition zu überschreiben. Bei den meisten anderen Datenbanken wird es problemlos zu einem einfachen TIMESTAMP
degradiert .
Wenn Sie in Zukunft auf eine andere Datenbank umsteigen möchten, die ebenfalls Mikrosekunden-Präzision unterstützt, schauen Sie im entsprechenden Dialect
nach; Es wird wahrscheinlich Unterstützung für die Funktion enthalten, und wenn nicht, können Sie es jederzeit anpassen.
Dies liegt daran, dass im registerColumnType
Aufruf oben, die Genauigkeit des TIMESTAMP
ist auf 6 festgelegt. Wenn Sie es anpassen möchten, führen Sie Ihren eigenen benutzerdefinierten Dialekt ein (erweitert von MySql57Dialect
) und überschreibe die Definition mit:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
Anschließend können Sie die Spaltenlänge mit length
überschreiben , precision
, oder scale
(je nachdem, was Sie in die Klammern setzen). Beachten Sie, dass das zweite Argument der Methode die maximal mögliche Spaltenlänge für diesen bestimmten Datentyp definiert. Wenn Sie also z. Nanosekunden-Präzision, sollten Sie sie auf 9 ändern.