sql >> データベース >  >> RDS >> Mysql

MySQL DATETIME精度(joda-time、Hibernate、org.jadira.usertype、hbm2ddl)

    @ColumnにMySQL列定義スニペットをハードコーディングしないようにするもう1つの解決策を見つけました 注釈。 org.hibernate.dialect.MySQLDialectをオーバーライドして、独自の休止状態の方言を定義します :

    package org.yourproject;
    
    import java.sql.Types;
    import org.hibernate.dialect.MySQL5Dialect;
    
    public class MySQL564PlusDialect extends MySQL5Dialect {
       public MySQL564PlusDialect() {
          super();
          registerColumnType( Types.TIMESTAMP, 6, "datetime($l)" );
       }
    }
    

    そしてそれをhibernateプロパティhibernate.dialect=org.yourproject.MySQL564PlusDialectとして指定します (拡張する方言は異なる場合があります。例:org.hibernate.dialect.MySQL5InnoDBDialect 代わりに)。

    これで、DATETIMEの精度を調整できます @Column内から lengthを使用した注釈 属性:

    @Basic(optional=false)
    @Column(name="moment", length=3)
    @Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
    public DateTime getMoment() {
     ...
    

    DATETIME(3)を生成します ミリ秒の精度を意味する列定義。単純なDATETIMEが必要な場合 (秒の小数なし)、長さを指定しないでください。 lengthの値を使用できます 最大6は、マイクロ秒の精度を意味します。

    上記とは異なる方言を使用する場合(たとえば、標準のorg.hibernate.dialect.MySQLDialect または他のデータベース)、コードを壊さない:length @Columnの属性 無視されます。

    P.S. precisionを利用する方が賢明です @Columnの属性 lengthの代わりに 、ただし、"datetime($l)"の単純な置換 "datetime($p)"のパターン 私自身の方言の実装の1つは、すぐには機能しません。



    1. MySQL C ++コネクタ:`get_driver_instance'への未定義の参照

    2. MySQLカウント頻度

    3. テーブルの主キーに一意のランダム整数IDを作成するにはどうすればよいですか?

    4. PostgreSQLデータベースのすべてのインデックス名、列名、およびそのテーブル名を一覧表示します