MySql57Dialect
(et/ou MySql57InnoDbDialect
, selon la version d'Hibernate), le TIMESTAMP
Le type SQL est déjà mappé à un TIMESTAMP(6)
type de colonne de base de données :
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
Cela signifie que la définition de colonne par défaut doit prendre en charge la précision à la microseconde. La meilleure solution consiste à laisser Hibernate générer le schéma sans remplacer la définition de la colonne. Pour la plupart des autres bases de données, il se dégradera gracieusement en un simple TIMESTAMP
.
Si vous souhaitez passer ultérieurement à une autre base de données prenant également en charge la précision à la microseconde, recherchez le Dialect
correspondant.; il inclura probablement la prise en charge de la fonctionnalité, et si ce n'est pas le cas, vous pouvez toujours la personnaliser.
C'est parce que dans le registerColumnType
call ci-dessus, la précision du TIMESTAMP
est fixé à 6. Si vous souhaitez pouvoir le personnaliser, déployez votre propre dialecte personnalisé (s'étendant de MySql57Dialect
) et remplacez la définition par :
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
Vous pourrez alors remplacer la longueur de la colonne en utilisant soit length
, precision
, ou scale
(selon ce que vous mettez entre parenthèses). Notez que le deuxième argument de la méthode définit la longueur de colonne maximale possible pour ce type de données particulier, donc si vous voulez par ex. précision nanoseconde, vous devriez le changer en 9.