所以我在GAE的数据存储中创建用户帐户(使用Java)......
Entity account = new Entity(DATASTORE_KIND, accountAncestorKey);
Key accountKey = datastore.put(account);
创建实体,(最终),太棒了!现在什么时候对象的ID可用?可能需要“一会儿”才能对对象进行getProperty("ID")
吗?
如果我需要立即使用ID,我应该手动为自己分配1个ID吗?
我问这个问题是因为我可以自己运行一些代码测试,但这并不能最终解决ID是否在put之后“立即”生成的问题......而且从我读过的内容来看,我怀疑我不应该依赖于此。
答案 0 :(得分:1)
我认为它应该非常快(30-50毫秒),如果你试图在存储后立即从数据存储中获取实体,那么它应该是一个问题。
您可以使用log4j并尝试输出持续时间的时间,以了解需要多长时间。
实施例,
信息:持续数据存储的时间: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
答案 1 :(得分:1)
保存实体时,它包含完整密钥,ID是密钥的一部分。因此,当实体可用时,它立即可用。
请注意,实体ID不是实体上的属性(除非您自己创建)。所以你应该使用entity.getKey().getId()
。