現時点では、フィールド@DatabaseFiled(version = true)
では機能しないを使用する以外に、これを達成する方法はないようです。Timestamp
これはトランクで修正されており、4.46 で動作する予定です:
http://ormlite.com/docs/version-field
ただし、4.45 でタイムスタンプ フィールドを使用できるようにするのはかなりの方法です。extends TimeStampType
次のメソッドをオーバーライドする必要があります。詳細については、この回答の下部を参照してください。
@Override
public Object moveToNextValue(Object currentValue) {
long newVal = System.currentTimeMillis();
if (currentValue == null) {
return new java.sql.Timestamp(newVal);
} else if (newVal == ((java.sql.Timestamp) currentValue).getTime()) {
return new java.sql.Timestamp(newVal + 1L);
} else {
return new java.sql.Timestamp(newVal);
}
}
次に、フィールドを次のように指定します。
@DatabaseField(persisterClass = LocalCurrentTimeStampType.class, version = true)
java.sql.Timestamp timestamp;
[[以下は作成日では機能しますが、他の更新では機能しません。一般的な情報として残しておきます。]]
これは自明ではありませんでしたが、トランクの最新バージョンを使用してこれを行う方法を最終的に見つけました。4.46 では、@DatabaseField(readOnly = true)
読み取り専用のフィールドのサポートを追加します。これにより、次のことが言えます。
@DatabaseField(defaultValue = "CURRENT_TIMESTAMP()", readOnly = true)
java.sql.Timestamp timestamp;
読み取り専用フィールドが作成または更新されることはなく、クエリでのみ返されます。問題は、 がTimeStampType
を検証しようとすると例外がスローされることCURRENT_TIMESTAMP()
です。これを解決するには、カスタムの永続化を定義する必要があります。
public class LocalCurrentTimeStampType extends TimeStampType {
private static final LocalCurrentTimeStampType singleton =
new LocalCurrentTimeStampType();
private String defaultStr;
public LocalCurrentTimeStampType() {
super(SqlType.DATE, new Class<?>[] { java.sql.Timestamp.class });
}
public static LocalCurrentTimeStampType getSingleton() {
return singleton;
}
@Override
public boolean isEscapedDefaultValue() {
if ("CURRENT_TIMESTAMP()".equals(defaultStr)) {
return false;
} else {
return super.isEscapedDefaultValue();
}
}
@Override
public Object parseDefaultString(FieldType fieldType, String defaultStr) throws SQLException {
this.defaultStr = defaultStr;
if ("CURRENT_TIMESTAMP()".equals(defaultStr)) {
return defaultStr;
} else {
return super.parseDefaultString(fieldType, defaultStr);
}
}
}
次に、フィールド定義は次のようになります。
@DatabaseField(persisterClass = LocalCurrentTimeStampType.class,
defaultValue = "CURRENT_TIMESTAMP()", readOnly = true)
java.sql.Timestamp timestamp;
github コードから最新バージョンを取得できます: https://github.com/j256/ormlite-core