Java 可以使用负id';用于数据存储实体的?

Java 可以使用负id';用于数据存储实体的?,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我想再次访问,它说数据存储永远不能有负ID,但它是针对旧的M/s数据存储的,我认为不再适用 (请注意,此问题不同于关于自动生成功能的常见问题,自动生成功能仍然不会产生负数。) 我发现SO的共识是数据存储不支持负id,但我一直在我的应用程序中使用它们 创建实体时,我手动将负数分配给实体的(Java)长id字段。当我在GAE控制台data viewer中查看实体时,它们正确地显示为负数,例如“id=-8673495404141992816” 也许DS不支持负ID的想法只是M/s数据存储的遗迹,或者也

我想再次访问,它说数据存储永远不能有负ID,但它是针对旧的M/s数据存储的,我认为不再适用

(请注意,此问题不同于关于自动生成功能的常见问题,自动生成功能仍然不会产生负数。)

我发现SO的共识是数据存储不支持负id,但我一直在我的应用程序中使用它们

创建实体时,我手动将负数分配给实体的(Java)长id字段。当我在GAE控制台data viewer中查看实体时,它们正确地显示为负数,例如“id=-8673495404141992816”

也许DS不支持负ID的想法只是M/s数据存储的遗迹,或者也许我无意中进入了不受支持和未知的领域——在这种情况下,我应该更改我的应用程序


另外,在海事组织,这是一个关于DS的相当基本的问题,所以我想明确答案。毕竟,我希望可以选择使用64位哈希函数生成ID,该函数可以生成负数。

ID似乎是64位值。但是,默认的应用程序id生成器将它们限制为53位的正值,以便它们可以使用Javascript。你可能在未知的领域里漂泊


或者至少是很少使用的区域。

为什么不将哈希存储为字符串,然后就不会有我们不知道的任何潜在问题。我知道它不能回答您的问题;-)一些实体还存储在客户端的SQLite db中,因此如果我有一个长id,那么就更容易了。另外,字符串很长,我认为使用长id更有效。是的,你可能是对的。唯一的问题是appengine团队没有告诉我们什么;-)我会犹豫是否将自己限制在当前自动生成所使用的范围内——正如您所指出的,这将我限制在63位或64位中的53位(取决于负片是否正常)。这对于散列函数来说是一个巨大的损失。这取决于你使用它的目的。如果您有一个web前端,不必担心Javascript程序会使用大ID,这可能是值得的,但是如果您使用的是另一个客户端,那么您是对的,不需要限制自己。但是你必须拿出你自己的ID生成器,如果你想要独特性,这对GAE来说是非常困难的。我的前端只是Android,但你的观点值得考虑。