@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つは、すぐには機能しません。