관리 메뉴

IT.FARMER

Composite-id class must implement Serializable 본문

Spring/Spring Data JPA

Composite-id class must implement Serializable

아이티.파머 2021. 11. 22. 16:56
반응형

jpa class 생성할때 @Id 가 선언된 class 에 implement Serializable 을 해주어야한다.

reson

두개의 복합키를 만드는경우엔 직열화( serializable)를 하라고 하는데 자바에서의 직열화란 자바시스템 내부에서 사용되는 객체를 외부의 자바 시스템에서도 사용할수 있도록 바이트형태로 데이터를 변환하는 기술이다. 즉 자바시스템간의 데이터 교환을 위해존재한다.

근데 JPA 여기선 왜? 만들라고 하는거지 ?

https://bravenamme.github.io/2020/02/05/java-serializable/ 여기에 나와 있긴 한데. 시스템이 종료되더라도 없어지지 않고 영속화되어 네트워크 전송이 가능하다라고 한다. JSR220 에따르면 이객체를 어딘가로 전송하거나. 기록하는 행위등등 정말 직열화를 해야하는 용도가 아니라면 구현하지 않아도 된다한다.

그래서 왜? JPA에서는 직열화를 하라는거냐구요 ! ?

https://www.inflearn.com/questions/17117 JPA 표준스펙에 Entity에는 serializable 를 구현하도록 되어 있다고한다. JPA구현체에 따라 엔티티를 분산환경에서 사용하거나 직열화해서 다른 곳에 전송할수 있는 가능성을 열어 둔거라 한다.

implements Serializable 예제

@Table (name = "lok_modo_dataset_monthly_history")
@Entity
@Getter@Setter
public class LokDomoDatasetMonthlyHistory  {

    @Embeddable
    @Getter@Setter
    public static class LokDomoDatasetMonthlyHistoryPK implements Serializable{
        private Long historyNumber;
        private Long domoDatasetNumber;
    }

    @EmbeddedId
    private LokDomoDatasetMonthlyHistoryPK lokDomoDatasetMonthlyHistoryPK;

    private String userId;
    private String status;

    @CreationTimestamp
    private LocalDateTime creationTime;

}
반응형