MySql57Dialect
(および/または MySql57InnoDbDialect
、Hibernateのバージョンに応じて)、 TIMESTAMP
SQLタイプはすでにTIMESTAMP(6)
にマップされています データベースの列タイプ:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
これは、デフォルトの列定義がマイクロ秒の精度をサポートする必要があることを意味します。最善の行動は、列定義をオーバーライドせずにHibernateにスキーマを生成させることです。他のほとんどのデータベースでは、単純な TIMESTAMP
に正常に劣化します。 。
将来、マイクロ秒の精度もサポートする別のデータベースに切り替える場合は、関連する Dialect
を検索してください。;機能のサポートが含まれている可能性があり、含まれていない場合はいつでもカスタマイズできます。
これは、 registerColumnType
にあるためです 上記の呼び出し、 TIMESTAMP
の精度 は6に修正されています。カスタマイズできるようにする場合は、独自のカスタム方言を展開します( MySql57Dialect
から拡張) )そして定義を次のようにオーバーライドします:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
その後、 length
のいずれかを使用して列の長さをオーバーライドできます。 、精度コード> 、または
scale
(角かっこ内に何を入れるかによって異なります)。メソッドの2番目の引数は、この特定のデータ型の可能な最大列長を定義することに注意してください。ナノ秒の精度、9に変更する必要があります。