Key中GAE数据存储区长ID和字符串键的区别是什么。
使用密钥
KeyFactory.createKey(kind, key);
KeyFactory.createKey(kind, id);
因此,在这种情况下,任何一个都可以用作标识符。如果我从KeyFactory.createKey(kind, key)
创建一个密钥,其中key是一个字符串,我可以看到该密钥的id
字段为0.在这种情况下,getId()
将是0
?相反,如果设置的是KeyFactory.createKey(kind, someLongValue)
,则getName()
将为空String
?
答案 0 :(得分:2)
应用引擎密钥可以具有唯一的长ID或唯一的字符串名称 - 它们是互斥的。如果设置长ID,则名称将为null。您决定使用哪种实体类型实际上取决于您的用例。
使用长ID的好处是您可以让应用引擎为您自动生成它们。也就是说,您可以创建没有任何ID值的实体,然后在保存时,数据存储区将为其提供有效的唯一长ID。
如果使用字符串名称,则必须在保存实体之前创建唯一名称。在某些情况下,如果您在Entity上有一些属性可以自然地匹配唯一名称(例如,部件的SKU),这在某些情况下很有用。此外,有些人为String名称生成随机UUID - 这可确保所有名称全局唯一,而不仅仅是特定实体类型和祖先路径中的唯一名称。