エンティティのIDはlong(primitive type)またはLong(オブジェクトタイプ)?
何を選択しますか? longまたはLong?
@Entity
@Table(name = "COUNTRY")
public class CountryEntity implements Java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
private long id;
@Column(name = "NAME")
private String name;
@Column(name = "CURRENCY")
private String currency;
@Column(name = "PEOPLE")
private Long people;
@Column(name = "SIZE")
private Long size;
public CountryEntity() {
}
null
値をチェックすることでエンティティが永続的なIDを持っているかどうかをチェックする方が正しいので(MySQLでは値0のIDを持つことができます)、Longの方が適切だと思います。また、Springのような一部のライブラリは、ロジックのLong(デフォルト)タイプのIDに基づいています。例については、この 実装 を参照してください。
プリミティブの小さな利点:スペースが少し少なくて済みます。
PS:どちらも正しく、JPA仕様に従ってサポートされており、この質問への回答は何らかの形で意見に基づいています。
データベースにIDを生成させる(そうする必要があります)場合、最近インスタンス化されたCountryEntityオブジェクトがid==null
。 longを使用する場合、idは常にnull以外の値(最初は0)を持ち、エンティティの永続化時に変更されます。
たぶんこれで怒られますが、どちらでもありません。 JavaでIDフィールドを数値型として表すことはできません。それらに対して数学的な計算を実行する予定がない限り。代わりに文字列を使用してください。IDがLongの容量を超えたときにオーバーフローの問題が発生することはありません。 。また、24桁のLongをJSONにシリアル化してみると、問題が発生します。