MySql57Dialect
(en/of MySql57InnoDbDialect
, afhankelijk van de versie van Hibernate), de TIMESTAMP
SQL-type is al toegewezen aan een TIMESTAMP(6)
type databasekolom:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
Dit betekent dat de standaard kolomdefinitie microseconde precisie moet ondersteunen. De beste manier van handelen is om Hibernate het schema te laten genereren zonder de kolomdefinitie te negeren. Voor de meeste andere databases zal het geleidelijk degraderen tot een eenvoudige TIMESTAMP
.
Als je in de toekomst wilt overschakelen naar een andere database die ook microseconde precisie ondersteunt, zoek dan het relevante Dialect
op; het zal waarschijnlijk ondersteuning voor de functie bevatten, en als dat niet het geval is, kunt u deze altijd aanpassen.
Dit komt omdat in het registerColumnType
oproep hierboven, de precisie van de TIMESTAMP
is vastgesteld op 6. Als je het wilt kunnen aanpassen, rol dan je eigen aangepaste dialect uit (uitbreidbaar van MySql57Dialect
) en overschrijf de definitie met:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
U kunt dan de kolomlengte overschrijven met behulp van length
, precision
, of scale
(afhankelijk van wat je tussen de haakjes plaatst). Merk op dat het tweede argument van de methode de maximaal mogelijke kolomlengte voor dit specifieke datatype definieert, dus als u b.v. nanoseconde precisie, moet u deze wijzigen in 9.