0

所以我在 GAE 的数据存储中创建用户帐户(使用 Java)......

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

实体被创建,(最终),太棒了!现在对象的 ID 什么时候可用?getProperty("ID")在我可以对物体做之前可能需要“一点时间”吗?

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

我问这个问题是因为我可以自己运行一些代码测试,但这并不能最终解决在放置后是否“立即”生成 ID 的问题......而且从我所读的内容来看,我怀疑我不应该依赖对此。

4

2 回答 2

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
于 2013-08-07T07:17:19.160 回答
1

保存实体时,它包含完整的密钥,ID 是密钥的一部分。因此,当实体可用时,它立即可用。

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

于 2013-08-07T10:35:30.050 回答