MySql57Dialect
(e/ou MySql57InnoDbDialect
, dependendo da versão do Hibernate), o TIMESTAMP
O tipo SQL já está mapeado para um TIMESTAMP(6)
tipo de coluna do banco de dados:registerColumnType( Types.TIMESTAMP, "datetime(6)" );
Isso significa que a definição de coluna padrão deve dar suporte à precisão de microssegundos. O melhor curso de ação é deixar o Hibernate gerar o esquema sem substituir a definição da coluna. Para a maioria dos outros bancos de dados, ele será degradado normalmente para um simples
TIMESTAMP
. Se você quiser mudar para outro banco de dados no futuro que também suporte a precisão de microssegundos, procure o
Dialect
relevante; provavelmente incluirá suporte para o recurso e, caso contrário, você sempre poderá personalizá-lo. Isso ocorre porque no
registerColumnType
chamada acima, a precisão do TIMESTAMP
é fixado em 6. Se você quiser personalizá-lo, implemente seu próprio dialeto personalizado (estendendo-se de MySql57Dialect
) e substitua a definição por:registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
Você poderá então substituir o comprimento da coluna usando
length
, precision
, ou scale
(dependendo do que você colocar dentro dos colchetes). Observe que o segundo argumento para o método define o comprimento máximo de coluna possível para esse tipo de dados específico, portanto, se você quiser, por exemplo, precisão de nanossegundos, você deve alterá-la para 9.