2013-08-07 40 views
0

所以我在GAE的数据存储中创建用户帐户(使用Java)...Google App Engine:何时可用自动ID?

Entity account = new Entity(DATASTORE_KIND, accountAncestorKey); 
Key accountKey = datastore.put(account); 

创建实体,(最终),太棒了!现在对象的ID何时可用?可能需要“一段时间”才能对对象执行getProperty("ID")

如果我立即需要ID,我应该手动分配一个ID给我自己使用吗?

我在问这个问题,因为我可以自己运行一些代码测试,但是这并不能确定地解决ID是否在产品“立即”生成后产生的问题......并且从我读过的内容来看,我怀疑我不应该依赖这个。

回答

1

当实体被保存它含有完整的密钥和ID是键的一部分。所以当实体可用时它立即可用。

请注意,实体ID不是实体上的属性(除非您自己创建一个实体)。所以你应该改用entity.getKey().getId()

+0

之后立即获得Id是一个问题,但我不确定这个答案是什么,但是这里的信息支持这个答案,即这个Key可以立即使用 - 至少是使用DatastoreService.put()。我同意,因为需要构建Key https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/DatastoreService#,因此应该立即推出Id把%28com.google.appengine.api.datastore.Entity 29% – user1445967

1

我相信它应该非常快(30-50毫秒),在你的情况下,如果你试图在存储数据存储之后立即从数据存储获取实体,它应该不成问题。

您可以使用log4j并尝试输出持续时间的时间以了解需要多长时间。

实施例,

INFO:时间持续数据存储区:38毫秒

# A default log4j configuration for log4j users. 
# 
# To use this configuration, deploy it into your application's WEB-INF/classes 
# directory. You are also encouraged to edit it as you like. 

# Root logger option 
log4j.rootLogger=INFO 

# Configure the console as our one appender 
log4j.appender.A1=org.apache.log4j.ConsoleAppender 
log4j.appender.A1.layout=org.apache.log4j.PatternLayout 
log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n 

# tighten logging on the DataNucleus Categories 
log4j.category.DataNucleus.JDO=WARN, A1 
log4j.category.DataNucleus.Persistence=WARN, A1 
log4j.category.DataNucleus.Cache=WARN, A1 
log4j.category.DataNucleus.MetaData=WARN, A1 
log4j.category.DataNucleus.General=WARN, A1 
log4j.category.DataNucleus.Utility=WARN, A1 
log4j.category.DataNucleus.Transaction=WARN, A1 
log4j.category.DataNucleus.Datastore=WARN, A1 
log4j.category.DataNucleus.ClassLoading=WARN, A1 
log4j.category.DataNucleus.Plugin=WARN, A1 
log4j.category.DataNucleus.ValueGeneration=WARN, A1 
log4j.category.DataNucleus.Enhancer=WARN, A1 
log4j.category.DataNucleus.SchemaTool=WARN, A1 
+0

根据上面的研究,毫秒数不应该是一个问题(如果GAE将来超快速,并且您可以在<1ms内存储实体...),但是说它不应该是正确的在存储Entity – user1445967