AppEngine でエンティティを永続化するために Objectify を使用しています。
いくつかのエンティティで、creationTime と lastUpdateTime を保存したいと考えています。
私の意図は、エンティティが初めて作成されたときに、作成時間がエンティティに追加されることです。エンティティが更新されるたびに、LastUpdate 時刻を更新する必要があります。
lastUpdateTime については、簡単に@PrePersist
フックをアタッチして lastUpdateTime を変更できます。
しかし、エンティティを更新するときはいつでも、creationTime を保持したいと考えています。
解決策の 1 つは、creationTime をフェッチしてからエンティティに追加することです。
保存するたびに creationTime をフェッチする必要がない方法はありますか?
Objectify がこれを無視することを期待して、creationTime を null に設定して組み合わせてみました@NotSaved(IfNull)
が、実際の動作は、データストアで creationTime=null を設定することです。
参考までに、私のエンティティは次のようになります。
public class TestEntity {
@Id
Long id;
Date creationTime;
Date lastUpdateTime;
String mutableField;
...
// Constructor1
public TestEntity(Long id, Date date, String mutableField) {
this.id = id;
creationTime = date;
lastUpdateTime = date;
this.mutableField = mutableField;
}
// Constructor2
public TestEntity(Long id, String mutableField) {
this.id = id;
lastUpdateTime = new Date();
this.mutableField = mutableField;
}
}
Edit1:
申し訳ありません。私の質問は不完全だったと思います。TestEntity 定義を変更しました。この TestEntity には、2 つの不変フィールド (id、creationTime) と 2 つの可変フィールド (lastUpdateTime、mutableField2) が含まれているとします。
コンテキストによっては、これら 5 つのフィールドすべてがクライアントに送信され、クライアントが mutableFields を更新し、可変フィールドを更新する要求を送信する可能性があります。
説明を簡単にするために、Session とその他の方法 (NameSpace など) を使用して、ユーザーがこのエンティティを変更できることを確認できると仮定します。
今、私の意図は次のことを行うことです:
* エンティティが初めて作成されるときは、constructor1 を使用します。
* クライアントがこのエンティティを要求すると、サーバーは (id と mutablefield) を送信します。
* クライアントは、ID とともに mutableField の新しい値でエンティティを更新するリクエストを送信します。
* サーバー側では、作成時間を失うことなく可変フィールドを更新したいと考えています。
これは、最初に DataStore からエンティティを取得し、次に mutableField を更新してから再度永続化することで実行できます。より良い解決策があるかどうか疑問に思っていました。