2012-04-18 7 views
0

HibernateとEhcacheで可変IDを使用するのは安全ですか? hashCodeはIDに基づいています。HibernateとEhcacheでは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 
    } 
} 

答えて

3

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

ビジネスキーは、1つまたは複数のエンティティプロパティ(したがって列)で構成され、変更可能です。

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

2

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

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

オブジェクトがHashMapまたはHashSetのときに「コード」フィールドが変更されると、オブジェクトまたはエントリが失われる可能性があります。

関連する問題