无法将生成的密钥增加1

min*_*imo 0 google-app-engine datanucleus

我正在为ORM使用Java和JPA.

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
Run Code Online (Sandbox Code Playgroud)

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

这似乎与文档相矛盾,文档声明"最简单的关键字段是一个长整数值,当对象首次保存到数据存储区时,JPA会自动填充该类,并且该类的所有其他实例都具有唯一值.键使用@Id注释和@GeneratedValue(strategy = GenerationType.IDENTITY)注释"

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

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
Run Code Online (Sandbox Code Playgroud)

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

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

我希望在我的live(beta)应用程序中不断更改之前得到一些确定的答案.不幸的是,到目前为止我在dev env中使用的所有方案都会产生连续的密钥,因此除了部署之外,没有办法测试新的方法.

提前致谢.

dra*_*onx 5

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

应用引擎上最简单的解决方案是设计您的密钥,这样您就不需要它们是连续的.考虑到BigTable的设计方式,如果你确实有连续递增的密钥,那么每当平板电脑需要拆分时,你可能会遇到一些性能瓶颈.