16

JPA エンティティ ジェネレーターは、エンティティの id フィールドに整数型を割り当てます。私のDBの対応する属性/列はシリアル型です(yep postgres)。また、整数型をエンティティ ID フィールドに割り当てます。Long getId()しかし、このページで の使用法を見てきました。geomajas の例でも、このタイプの型割り当てを見てきました。を使用する際に落とし穴はありますIntegerか? つまり、ID が 0 を下回らないように整数に注意する必要がありますが、同時に、Long ID が 2,147,483,647 を超えないようにする必要があります。それで、ここで何をしますか?

編集:と符号なし整数を混同していたので、長い整数と符号なし整数の間の混乱がなくなったので、Long「符号なし整数と Java エンティティの id フィールドの比較」はナンセンスだと思います。Integer私の悪い。回答とコメントありがとうございます。bigserial jpa エンティティ ジェネレーターを使用していたら、Long も使用していたと思います。

4

3 に答える 3

19

Longデータ型よりもはるかに容量が大きいIntegerため、データの長さが不明な場合は、型データを使用することをお勧めしますLong...

一方、容量が大きいため、余分なスペースを使用し、データがデータ型Longよりも大きくないことが確実な場合、使用するとコードが非効率になりますIntegerLong

于 2013-07-01T06:04:34.787 に答える
11

JPAエンティティジェネレーターは、エンティティのidフィールドに整数型を割り当てます

id フィールドのタイプを設定すると、JPA ジェネレーターによって一意の値が入力されます。Integer または Long を自由に使用できます。

Integer の使用に関して注意点はありますか?

そうではありませんが、Integer と Long の唯一の違いは、ビット数 (64 v 32) と許容範囲です。

Integer:             -2,147,483,648  to  2,147,483,647
Long:    -9,223,372,036,854,775,808  to  9,223,372,036,854,775,807

ジェネレーターは Id フィールドに値を割り当てます。生成される初期値を制御できます。@SequenceGenerator および @TableGenerator の場合は、initialValue 属性を設定します。ID ジェネレーターの場合、Identity 列のデータベース DDL 定義を変更します。

(アプリによって 1 週間に生成される ID の最大数) x (アプリが「稼働」できる最大の週数) を決定するだけです。結果がたとえば 1,500,000,000 (安全マージンを与える) より小さい場合は、自由に Integer を使用してください。それ以外の場合は、Long を使用します。

于 2013-07-01T07:01:53.063 に答える