Java 只能使用Objectify在GAE数据存储中更新字段一次

Java 只能使用Objectify在GAE数据存储中更新字段一次,java,gwt,google-cloud-datastore,requestfactory,objectify,Java,Gwt,Google Cloud Datastore,Requestfactory,Objectify,我正在使用Objectify将图表类序列化为GAE数据存储。我可以根据需要多次更新(序列化)所有字段,整数arrowTypeId除外,它只更新一次,之后始终保持相同的值。如果我离开应用程序并再次运行,我可以再次更新该值,但只能更新一次 要更新arroyTypeId,我调用sendDatabaseUpdateDiagramArrows()。情况就是这样: 我使用值1调用SendDatabaseUpdateDiagramRows() 我将该值设置为DiagramProxy.setArrowTypeI

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

要更新arroyTypeId,我调用sendDatabaseUpdateDiagramArrows()。情况就是这样:

  • 我使用值1调用SendDatabaseUpdateDiagramRows()
  • 我将该值设置为DiagramProxy.setArrowTypeId()
  • 作为测试,我将图表标题更改为DiagramProxy.getArrowTypeId()
  • 我叫save()
  • 在DAO save()上,接收到错误的ArrowTypeId值(保留旧值),但是令人惊讶的是,标题中存储了步骤3中正确的ArrowTypeId)
  • 此问题导致更改序列化。不显示任何异常

    • 请注意,我可以第一次将ArrowTypeId值从默认值1更新为2。但是下一次总是保持值2
    • 编辑:如果我将arrowTypeId更改为字符串,我也会遇到同样的问题
  • 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;
    }
    
    @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;
        }
    }
    
    @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();
    }
    
    public class DiagramDao extends ObjectifyDao<Diagram>{
    
        public void save(Diagram diagram)
        {
            this.put(diagram);
        } }
    
    Diagram.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;
    }
    
    @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;
        }
    }
    
    @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();
    }
    
    public class DiagramDao extends ObjectifyDao<Diagram>{
    
        public void save(Diagram diagram)
        {
            this.put(diagram);
        } }
    
    DiagramProxy.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;
    }
    
    @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;
        }
    }
    
    @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();
    }
    
    public class DiagramDao extends ObjectifyDao<Diagram>{
    
        public void save(Diagram diagram)
        {
            this.put(diagram);
        } }
    
    DiagramDao.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;
    }
    
    @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;
        }
    }
    
    @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();
    }
    
    public class DiagramDao extends ObjectifyDao<Diagram>{
    
        public void save(Diagram diagram)
        {
            this.put(diagram);
        } }
    
    公共类DiagramDao扩展了ObjectifyDao{
    公共作废保存(图表)
    {
    这个.放(图),;
    } }
    
    让我猜猜:)因为我没有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
    代码尚未发布,这可能有助于发现问题。

    让我猜猜:)因为我没有使用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
    code尚未发布,这可能有助于发现问题。

    尝试删除
    @index
    anotation并将
    @Id
    放在
    diagramId
    I已删除@index上,这不会造成任何影响(错误持续存在)。我无法添加'@Id',因为我正在扩展数据存储,其中有'@Id'Id和版本。因此,只需将diagramId视为一个普通字符串,而不是主键,但我正在使用它进行查询。尝试删除
    @Indexed
    anotation并将
    @Id
    放在
    diagramId
    I removed@Indexed上,它不会产生任何影响(错误仍然存在)。我无法添加'@Id',因为我正在扩展数据存储,其中有'@Id'Id和版本。所以只要把diagramId看作一个普通的字符串,而不是主键,但我用它来进行查询。