MySql57Dialect
(og/eller MySql57InnoDbDialect
, afhængigt af versionen af Hibernate), TIMESTAMP
SQL-typen er allerede knyttet til en TIMESTAMP(6)
database kolonnetype:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
Dette betyder, at standardsøjledefinitionen skal understøtte mikrosekunders præcision. Den bedste fremgangsmåde er at lade Hibernate generere skemaet uden at tilsidesætte kolonnedefinitionen. For de fleste andre databaser degraderes den elegant til en simpel TIMESTAMP
.
Hvis du ønsker at skifte til en anden database i fremtiden, som også understøtter mikrosekundpræcision, skal du slå den relevante Dialect
op.; det vil sandsynligvis omfatte understøttelse af funktionen, og hvis ikke, kan du altid tilpasse det.
Dette er fordi i registerColumnType
opkald ovenfor, præcisionen af TIMESTAMP
er fastsat til 6. Hvis du vil være i stand til at tilpasse det, skal du udrulle din egen tilpassede dialekt (forlænger fra MySql57Dialect
) og tilsidesæt definitionen med:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
Du vil derefter være i stand til at tilsidesætte kolonnelængden ved at bruge enten length
, precision
eller scale
(afhængig af hvad du sætter inden i beslagene). Bemærk at det andet argument til metoden definerer den maksimalt mulige kolonnelængde for netop denne datatype, så hvis du f.eks. nanosekunds præcision, bør du ændre den til 9.