Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据存储中的自定义迭代器使用JAVA显示零_Java_Google App Engine_Google Cloud Platform_Google Cloud Datastore - Fatal编程技术网

数据存储中的自定义迭代器使用JAVA显示零

数据存储中的自定义迭代器使用JAVA显示零,java,google-app-engine,google-cloud-platform,google-cloud-datastore,Java,Google App Engine,Google Cloud Platform,Google Cloud Datastore,我使用数据存储实体存储int值number=0。在add函数中,我使用了count=number++。但第一次应用程序推送到GAE时,它显示0。然后从1开始。所以我改为int number=10,尽管我得到的值是零,但数据存储存储为10。插入记录后,如何在java页面中获取更新的值?当我尝试获取当前值时,它显示为零,但在数据存储中存储为10。请帮我解决这个问题。如何获得价值10。这只发生在第一次部署和第一张票证时,然后才显示正确的值(迭代器值) 谢谢 这是我的密码 @Entity public

我使用数据存储实体存储int值number=0。在add函数中,我使用了count=number++。但第一次应用程序推送到GAE时,它显示0。然后从1开始。所以我改为int number=10,尽管我得到的值是零,但数据存储存储为10。插入记录后,如何在java页面中获取更新的值?当我尝试获取当前值时,它显示为零,但在数据存储中存储为10。请帮我解决这个问题。如何获得价值10。这只发生在第一次部署和第一张票证时,然后才显示正确的值(迭代器值)

谢谢

这是我的密码

@Entity
public class Ticket {

    //static int nextID = 17;

      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
      private String title;  
      private Text description;
      static int nextID = 10;
      private int current;


      public Ticket(String title, Text description) {
            current = nextID++;
            this.title = title;
            this.priority = priority;
            this.description = description;
}

谷歌云平台有多个数据中心,它们并不总是持有相同记录的相同状态。如果在增加值后立即查询该值,则尤其如此。您可以使用祖先查询来检索实体,这将使其保持最新和一致。详情请参阅文章[1]

这里有一个与祖先查询[2]的链接。其思想是,当您使用祖先查询时,它会强制查询在完成所有更改(针对该查询)后返回数据。这确保了最新的强一致性

[1] -

[2] -

==--==示例(来自我提供的第二个链接)


这确保了photoQuery不仅仅是一个针对任何随机数据中心的随机查询,还可以提取任何数据;它确保从数据存储中获取最新数据。

我是使用java的GAE新手。我不能理解你的疑问。请举例说明。我正在使用DAO和javax.persistence.Query。使用此示例,请将数据存储查询方法用于祖先查询(如示例所示)。其思想是,当您向实体提供祖先密钥,然后稍后使用祖先密钥查询它时。它将返回实体的最新版本。好的,谢谢您给出示例。我不是在问主键。我将创建自定义迭代器。这对自定义迭代器有帮助吗?好的,您最初的问题是自定义迭代器有时会有过时的数据,对吗?原因是当您查询迭代器(添加到迭代器中)时,有时会发现过时的版本。因此,使用祖先查询,您可以确保获得保存的迭代器的更新版本。示例:如果x=0,x++,如果使用祖先查询获取,则fetch x将给出x=1;如果使用普通查询获取,则仍然可能是x=0。现在只有我得到了知识,谢谢。我已经使用了javax.persistence.Query。我现在能用吗?或者我可以改变我的项目。
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

Entity tom = new Entity("Person", "Tom");
Key tomKey = tom.getKey();
datastore.put(tom);


Entity weddingPhoto = new Entity("Photo", tomKey);
weddingPhoto.setProperty("imageURL",
                         "http://domain.com/some/path/to/wedding_photo.jpg");

Entity babyPhoto = new Entity("Photo", tomKey);
babyPhoto.setProperty("imageURL",
                      "http://domain.com/some/path/to/baby_photo.jpg");

Entity dancePhoto = new Entity("Photo", tomKey);
dancePhoto.setProperty("imageURL",
                       "http://domain.com/some/path/to/dance_photo.jpg");

Entity campingPhoto = new Entity("Photo");
campingPhoto.setProperty("imageURL",
                         "http://domain.com/some/path/to/camping_photo.jpg");

List<Entity> photoList = Arrays.asList(weddingPhoto, babyPhoto,
                                       dancePhoto, campingPhoto);
datastore.put(photoList);


Query photoQuery = new Query("Photo")
                         .setAncestor(tomKey);  


// This returns weddingPhoto, babyPhoto, and dancePhoto,
// but not campingPhoto, because tom is not an ancestor
List<Entity> results = datastore.prepare(photoQuery)
                                .asList(FetchOptions.Builder.withDefaults());
List<Entity> photoList = Arrays.asList(weddingPhoto, babyPhoto,
                                           dancePhoto, campingPhoto);
datastore.put(photoList);
Query photoQuery = new Query("Photo")
                             .setAncestor(tomKey);