1

我正在使用 Objectify 将 Diagram 类序列化为 GAE Datastore。我可以根据需要多次更新(序列化)所有字段,但整数 arrowTypeId 除外,它只更新一次,之后始终保持相同的值。如果我离开应用程序并再次运行它,我可以再次更新该值,但只能更新一次。

要更新 arroyTypeId,我正在调用 sendDatabaseUpdateDiagramArrows()。这就是发生的事情:

  1. 我用值 1 调用 sendDatabaseUpdateDiagramArrows()
  2. 我将该值设置为 DiagramProxy.setArrowTypeId()。
  3. 作为测试,我将图表标题更改为 DiagramProxy.getArrowTypeId()
  4. 我调用 save()
  5. 在 DAO save() 上,收到了错误的 ArrowTypeId 值(保留旧值),但令人惊讶的是,标题具有从步骤 3 存储的正确 ArrowTypeId)
  6. 更改与此问题有关。不显示任何异常。

    • 请注意,我可以第一次更新 ArrowTypeId 值,从默认值 1 到 2。但下一次始终保持值 2。
    • 编辑:如果我将 arrowTypeId 更改为字符串,我也会遇到同样的问题。

数据库实用程序.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;
}

图.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);
    } }
4

1 回答 1

1

让我猜猜:) 因为我没有使用 GAE 数据存储的经验。

没看懂,为什么要

@Indexed private String diagramId;

但 getter 和 setter 具有非标准名称:

public String get_id() {
    return diagramId;
}
public void set_id(String diagramId) {
    this.diagramId = diagramId;
}

我宁愿去:

@Indexed private String diagramId;
public String getDiagramId() {
        return diagramId;
    }
    public void setDiagramId(String diagramId) {
        this.diagramId = diagramId;
    }

另一件事是DiagramRequest代码尚未发布,也许这有助于发现问题。

于 2012-11-10T22:44:23.643 回答