0

Hibernate と Ehcache で変更可能な ID を使用しても安全ですか? hashCodeまた、ID に基づいていることに注意してください。

class Company implements Serializable {
  String code; // PK
  public int hashCode() {
    return code == null ? 17 : code.hashCode();
  }
  public boolean equals(Object o) {
    // Some obvious equals checking for type and field equality
  }
}
4

2 に答える 2

3

ビジネス キー代理キーの概念には違いがあります。通常、ID は不変の識別子 (代理キー) を意味し、ビジネス上の意味はありません。データベース レベルでは、対応する列が主キーになるため、他のテーブルの外部キーによって参照され、参照整合性が保証されます。ID をモデル化するエンティティ プロパティは、多くの場合、Long 型です。その値は一度割り当てられ、変更されることはありません。

ビジネス キーは、変更可能な 1 つ以上のエンティティ プロパティ (および列) で構成できます。

質問のスニペットで提供されているものは、フィールドcode(非公開にする必要があります) がビジネス キーであることを示しています。したがって、必要に応じて変更できます。エンティティ タイプには ID フィールドがありませんが。

于 2012-04-18T12:03:22.043 に答える
2

それはおそらく良い考えではありません。(ビジネス キー (コード) をオブジェクトのプライマリ キーとして使用することをお勧めします。プロセスでキーを変更または再割り当てできるようにする必要がある場合、複雑になる可能性があります。)

ただし、安全かどうか (少なくとも Hibernate の場合) は、「コード」フィールドがどのように変更されるかによって異なります。オブジェクトを永続化した後にそのコードを変更すると、メモリ内とデータベース内のコピー間の関係が壊れ、悪いことが起こります。

HashMapもう 1 つの問題は、オブジェクトがまたはにある間に「コード」フィールドが変更された場合HashSet、オブジェクトまたはエントリが失われる可能性があることです。

于 2012-04-18T12:10:14.640 に答える