永続化について話すだけの場合はSerializable
必要ありませんが、エンティティを作成することをお勧めしSerializable
ます。
私たちは、露光されている場合はdomain
/ entities
直接プレゼンテーション層に公開されたオブジェクト、代わりに使用してのDTO
、その場合は実装する必要がありますSerializable
。これらのドメインオブジェクトはHTTPSession
、キャッシュ/最適化の目的でに保存できます。httpセッションは、シリアル化またはクラスタ化できます。また、JVM
インスタンス間のデータ転送にも必要です。
DTO
永続化レイヤーとサービスレイヤーを分離するために使用する場合、ドメインオブジェクトを非Serializable
生産的で「encapsulation
」に違反するものとしてマークします。その後、それはアンチパターンになります。
複合識別子
主キークラスはシリアル化可能である必要があります。
POJOモデル
エンティティインスタンスを分離されたオブジェクトとしてリモートで使用する場合、エンティティクラスはSerializable
インターフェイスを実装する必要があります。
キャッシュ
さらに、clustered
2番目のレベルを実装する場合cache
、エンティティはでなければなりませんserializable
。2番目のレベルのキャッシュエントリのキーとして使用される可能性があるSerializable
ため、これidentifier
はJPA要件であるため、識別子を指定する必要があります。
エンティティをシリアル化するときはserialVersionUID
、プライベートアクセス修飾子を明示的に指定してください。serializable
クラスが明示的にを宣言しない場合、Java(TM)Object Serialization Specificationで説明されているようにserialVersionUID
、シリアル化ランタイムはserialVersionUID
クラスのさまざまな側面に基づいてそのクラスのデフォルト値を計算します。デフォルトのserialVersionUID
計算は、コンパイラーの実装によって異なる可能性があるクラスの詳細に非常に敏感であるため、InvalidClassExceptions
逆シリアル化中に予期しない結果になる可能性があります。