0

ORMにJavaとJPAを使用しています。

最初は、エンティティ キーを次のように定義していました。

@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 を使用する必要がありますか? それとも、Key フィールドではなく Long で IDENTITY を使用するべきでしたか?

ライブ(ベータ版)アプリでこれを変更し続ける前に、決定的な答えを得たいと思っています。残念ながら、開発環境でこれまでに使用したすべてのスキームは連続したキーになるため、展開する以外に新しいアプローチをテストする方法はありません。

前もって感謝します。

4

1 に答える 1

5

App Engine でキーを連続させるのは非常に困難です。ドキュメントは、自動生成されたキーが連続しているとは決して述べていません - それらが一意になることだけです。

App Engine での最も簡単な解決策は、キーが連続している必要がないようにキーを設計することです。BigTable の設計方法を考えると、連続してインクリメントするキーがある場合、タブレットを内部で分割する必要がある場合は、パフォーマンスのボトルネックが発生する可能性があります。

于 2012-05-24T00:56:14.297 に答える