Objectifyを使用してDiagramクラスをGAEデータストアにシリアル化しています。すべてのフィールドを必要な回数だけ更新(シリアル化)できます。ただし、整数のarrowTypeIdは1回だけ更新され、その後は常に同じ値を維持します。アプリを終了して再度実行すると、その値を再度更新できますが、更新できるのは1回だけです。
arroyTypeIdを更新するために、sendDatabaseUpdateDiagramArrows()を呼び出しています。これが起こることです:
- 値1でsendDatabaseUpdateDiagramArrows()を呼び出します
- その値をDiagramProxy.setArrowTypeId()に設定しました。
- テストとして、ダイアグラムのタイトルをDiagramProxy.getArrowTypeId()に変更します。
- save()を呼び出します
- DAO save()で、誤ったArrowTypeIdの値が受信されます(古い値が保持されます)が、驚くべきことに、タイトルには手順3で保存された正しいArrowTypeIdがあります)
この問題により、変更がシリアル化されます。例外は表示されません。
- ArrowTypeId値を最初にデフォルト値1から2に更新できることに注意してください。ただし、次回は常に値2を維持します。
- 編集:arrowTypeIdをStringに変更すると、同じ問題が発生します。
DatabaseUtils.java
public static DiagramProxy sendDatabaseUpdateDiagramArrows(DialectiveRequestFactory requestFactory, Integer value, DiagramProxy cellDiagramProxy)
{
DiagramRequest diagramRequest = requestFactory.diagramRequest();
DiagramProxy newDiagramProxy = diagramRequest.edit(cellDiagramProxy);
Date date = new Date();
newDiagramProxy.setArrowTypeId(value);
newDiagramProxy.setTitle(Integer.toString(newDiagramProxy.getArrowTypeId()));
diagramRequest.save(newDiagramProxy).fire();
return cellDiagramProxy;
}
Diagram.java
@Entity
public class Diagram extends DatastoreObject{
@Indexed private String diagramId;
private String title;
private Integer arrowTypeId;
public String get_id() {
return diagramId;
}
public void set_id(String diagramId) {
this.diagramId = diagramId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Integer getArrowTypeId() {
return arrowTypeId;
}
public void setArrowTypeId(Integer arrowTypeId) {
this.arrowTypeId = arrowTypeId;
}
}
DiagramProxy.java
@ProxyFor(value = Diagram.class, locator = ObjectifyLocator.class)
public interface DiagramProxy extends EntityProxy{
void set_id(String id);
void setTitle(String title);
void setArrowTypeId(Integer arrowTypeId);
Integer getArrowTypeId();
String get_id();
String getTitle();
}
DiagramDao.java
public class DiagramDao extends ObjectifyDao<Diagram>{
public void save(Diagram diagram)
{
this.put(diagram);
} }