0

我将 Java 和 JPA 用于 ORM。

最初我是这样定义实体键的:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;

但这导致 id 增长得非常快且以不可预测的方式(...19,20,22,1003...1007,1014,1015,2004...)

这似乎与文档相矛盾,该文档指出“最简单的键字段是一个长整数值,当对象第一次保存到数据存储区时,该值由 JPA 自动填充,该值在该类的所有其他实例中都是唯一的。长整数键使用 @Id 注释和 @GeneratedValue(strategy = GenerationType.IDENTITY) 注释”

所以我找到了这个单元测试,然后我切换到了它在那里完成的方式:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;

在更新一些 GQL 语句后迁移得很好,但我仍然看到键每次增加 1000。

我应该使用 GenerationType.TABLE 吗?或者我应该在 Long 而不是 Key 字段上使用 IDENTITY?

我希望在我的实时(测试版)应用程序中不断改变它之前得到一些明确的答案。不幸的是,到目前为止我在开发环境中使用的所有方案都会产生连续的键,所以除了部署之外,真的没有办法测试新方法。

提前致谢。

4

1 回答 1

5

在 App Engine 上做连续键真的很难。文档从未声明自动生成的密钥是连续的 - 只是它们是唯一的。

应用程序引擎上最简单的解决方案是设计您的密钥,以便您不需要它们是连续的。鉴于 BigTable 的设计方式,如果您确实有连续递增的键,那么每当需要在引擎盖下拆分平板电脑时,您可能会遇到一些性能瓶颈。

于 2012-05-24T00:56:14.297 回答