티스토리 뷰

반응형

이번에 작성할 내용은 JPA 복합키 매핑을 적용할 때 엔티티 클래스 생성하는 내용을 살펴보고자 합니다. 

create table push_log (
      push_id bigint not null,
      user_id bigint not null,
      clicked bit not null default false,
      primary key (user_id, push_id)
) engine=InnoDB ;

위와 같이 푸시를 발송한 내역의 테이블이 존재하며, 클릭했는지 안했는지 체크하기 위한 플래그값인 'clicked' 라는 값을 가진 로그성 테이블이 존재한다고 가정합니다. 이렇게 primary key가 2개 이상인 경우 복합키로 보통 통칭을 하는데 복합키는 구현하는데 크게 중요하지 않으므로 패스하겠습니다. 방법은 2가지가 있습니다. 

 


 

1. @IdClass를 사용할 때

아래와 같은 Serializable 클래스를 구현하는 클래스를 생성합니다. 

@Data
public class PushLogPK implements Serializable {
    private Long pushId;
    private Long userId;
}

그 다음 엔티티 클래스에 식별자를 붙입니다. 

@Entity
@Data
@IdClass(PushLogPK.class)
public class PushLog {

    @Id
    @Column(name = "user_id")
    private Long userId;

    @Id
    @Column(name = "push_id")
    private Long pushId;

    private boolean clicked;

    public PushLog() {}
}

 

 

2. @Embeddable을 사용할 때 

위와 마찬가지로 @Embeddable 어노테이션이 붙어있고 Serializable 인터페이스를 상속하는 클래스를 생성합니다.

@Data
@Embeddable
public class PushLogPK implements Serializable {
    private Long pushId;
    private Long userId;
}

@EmbeddedId 를 엔티티 클래스에 붙여줍니다.

@Entity
@Data
public class PushLog {

    @EmbeddedId
    private PushLogPK pushLogPK;

    private boolean clicked;

    public PushLog() {}
}

 

복합키를 사용했을 때 장단점과 코드 작성하는 법 : https://abbo.tistory.com/351

 

JPA 복합키의 장점과 단점 알아보기

이전 글에서 JPA 복합키의 사용법을 알아보았는데요, 이번에는 JPA에서 선호하는 키 방법에 대해 간단히 살펴보고자 합니다. 이전 글 : https://abbo.tistory.com/329 JPA 복합키 (2개 이상의 PK) 사용할 때

abbo.tistory.com

 

반응형
댓글
공지사항