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_Objectify - Fatal编程技术网

Java 自动生成密钥

Java 自动生成密钥,java,google-app-engine,objectify,Java,Google App Engine,Objectify,我的理解是,在使用objectify时,可以通过以下两种方式之一生成数据存储密钥: 指定对象的唯一ID,该ID将用于生成数据存储密钥(分配给带有注释@ID的数据成员的唯一ID) 不指定唯一ID,因此将自动生成数据存储密钥(数据成员上的注释@ID仍然存在,但未为其分配任何内容) 使用选项1,为了加载指定的实体,我们首先使用key.create(SomeEntity.class,uniqueID)获得了一个键,其中uniqueID是唯一的 如果我决定使用选项2,如果我让数据存储自动生成密钥,如何加载

我的理解是,在使用objectify时,可以通过以下两种方式之一生成数据存储密钥:

  • 指定对象的唯一ID,该ID将用于生成数据存储密钥(分配给带有注释@ID的数据成员的唯一ID)

  • 不指定唯一ID,因此将自动生成数据存储密钥(数据成员上的注释@ID仍然存在,但未为其分配任何内容)

  • 使用选项1,为了加载指定的实体,我们首先使用key.create(SomeEntity.class,uniqueID)获得了一个键,其中uniqueID是唯一的


    如果我决定使用选项2,如果我让数据存储自动生成密钥,如何加载所需的实体?

    使用任何其他参数?如果您创建了一个对象而没有决定键,但提供了(例如)一个城市、一个用户名、一封电子邮件,那么您可以按城市、用户名、电子邮件进行搜索。一旦你有了它,你就有了对象。如果需要,您可以从那里获取对象的密钥。

    如果您的实体@Id字段为空,并且您使用.now()同步保存它,那么@Id注释字段(本例中假定为“Id”)将在以下调用期间设置为自动分配/生成的值

    ofy().save().entity(someEntity).now();
    Long myId = someEntity.getId();
    
    然后,someEntity.getId()将是一个有效的生成字符串/长字符串,您可以使用它,在某处注意,提供给用户,从API返回,等等,以便以后:

    ofy().load().type(Entity.class).id(myId).now();
    
    如果需要异步保存实体(不带.now()),也可以,只需在保存之前使用allocateId函数设置id,以确保唯一id-这类似于1),但这是生成唯一id的安全方法


    通常应避免事后通过查询字段组合来搜索条目,因为根据您的数据,它可能与单个条目不匹配,并且您需要为这些字段编制索引以增加成本。

    Ah听起来不错。但是如果我查询的参数的唯一性不能得到保证怎么办呢?我需要更好地理解您的精确用例,但我不认为有理由在数据存储中使用两个完全相同的实体来使用y().load().type(Entity.class).id(someEntity.getId()).now();您需要引用“someEntity”(以便可以调用someEntity.getId()。但是不是y().load().type(Entity.class).id(someEntity.getId()).now()这一行的全部要点,以实际获取“someEntity”(至少这是我想要做的)。若我并没有对“someEntity”的引用(这就是为什么我想使用y.load()从数据存储中实际加载“someEntity”),那个么通过key/id检索它似乎是不可能的。你们知道我来自哪里吗?我遗漏了什么?这是一个精心设计的示例,仅显示save@id被填充后,可以用于加载实体。您不需要某个实体,只需要它的id(字符串/长值)。