私は Hibernate、Spring、JPA フレームワークの初心者です。とりあえず、Spring 3.1.1 - JPA with Hibernate 4 Implementation でシンプルなアーキテクチャを作ろうとしています。
とりあえず、データベースに依存しないようにするために、 TableGenerator でいくつかの ID を作成しました。
@Id
@Column(name = "AIR_ID", unique = true, nullable = false)
@TableGenerator(name="aircraftSeqStore",
table="T_S_APP_SEQ_STORE_AST",
pkColumnName="AST_SEQ_NAME",
valueColumnName = "AST_SEQ_VALUE",
pkColumnValue = "T_R_AIRCRAFT_AIR.AIR_ID",
allocationSize=1)
@GeneratedValue(strategy=GenerationType.TABLE,
generator="aircraftSeqStore")
private Integer id;
私の調査の後、「dont-let-hibernate-steal-your-identity」の記事を読んだ後、ID の管理方法がよくわかりませんでした。
エンティティを変更して割り当てられた値に置き換える必要がありますか (JPA で行う方法は?)、一時オブジェクトの作成時に ID に直接影響を与える UUID を生成する必要がありますか?
多くのテーブルには、いくつかの簡単なデータ (ID、名前) があります。私は、一意であるがオブジェクトの作成時にも影響を受けない名前プロパティの hashcode および equals メソッドを管理できると考えました....(だから私は null である id を持つ同じ pb と思いますか?)。
詳細については、マルチ結合テーブル (この結合テーブルの 3 つの FK) を表すエンティティがあります。
それで、あなたは私に何をアドバイスしますか?パフォーマンスのために UUID を生成するのは悪くありませんか?
編集 :
このエンティティは実行可能ですか?
@Id
@Column(name = "AIR_ID", unique = true, nullable = false)
@TableGenerator(name="aircraftSeqStore",
table="T_S_APP_SEQ_STORE_AST",
pkColumnName="AST_SEQ_NAME",
valueColumnName = "AST_SEQ_VALUE",
pkColumnValue = "T_R_AIRCRAFT_AIR.AIR_ID",
allocationSize=1)
@GeneratedValue(strategy=GenerationType.TABLE,
generator="aircraftSeqStore")
private Integer id;
@Column(name = "AIR_BUSINESS_ID", unique = true, nullable = false)
private String uuid = IdGenerator.createId();
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof Aircraft))
return false;
Aircraft other = (Aircraft)o;
if (uuid == null) return false;
return uuid .equals(other.getUuid ());
}
public int hashCode() {
if (uuid != null) {
return uuid .hashCode();
} else {
return super.hashCode();
}
}
ありがとうございました。