우리가 지속성에 대해서만 이야기한다면, Serializable
필요하지는 않지만 엔티티를 만드는 것이 가장 좋습니다 Serializable
.
우리가 노출되는 경우 domain
/ entities
직접 사용하는 대신, 프리젠 테이션 레이어에 노출 객체 DTO
우리가 구현해야하는 경우 Serializable
. 이러한 도메인 개체는 HTTPSession
캐싱 / 최적화 목적으로 저장할 수 있습니다 . http-session은 직렬화 또는 클러스터 될 수 있습니다. 또한 JVM
인스턴스 간 데이터 전송에도 필요합니다 .
DTO
지속성 계층과 서비스 계층을 분리 하는 데 사용 하는 경우 도메인 개체 Serializable
가 비생산적이며 " encapsulation
"을 위반하는 것으로 표시합니다 . 그런 다음 안티 패턴이됩니다.
복합 식별자
기본 키 클래스는 직렬화 가능해야합니다.
POJO 모델
엔티티 인스턴스를 분리 된 오브젝트로 원격으로 사용하려면 엔티티 클래스가 Serializable
인터페이스 를 구현해야합니다 .
캐시
또한 clustered
두 번째 수준 cache
을 구현하는 경우 엔터티는이어야합니다 serializable
. 식별자는 Serializable
JPA 요구 사항이기 때문에 identifier
2 단계 캐시 항목의 키로 사용될 수 있기 때문입니다 .
엔터티를 직렬화 할 때는 serialVersionUID
개인 액세스 수정자를 명시 적 으로 제공해야합니다 . 경우 때문에 serializable
클래스가 명시 적으로 선언하지 않는 serialVersionUID
한 다음 직렬화 런타임은 기본 계산합니다 serialVersionUID
자바 (TM) 객체 직렬화 사양에 설명 된 바와 같이, 클래스의 다양한 측면을 기준으로 그 클래스의 값입니다. 기본 serialVersionUID
계산은 컴파일러 구현에 따라 달라질 수있는 클래스 세부 사항에 매우 민감하므로 InvalidClassExceptions
역 직렬화 중에 예기치 않은 결과가 발생할 수 있습니다 .