Back-End/SpringBoot

[SpringBoot/JPA] @Embeddable, @EmbeddedId로 복합키 설정

코딩콩 2022. 5. 21. 22:00

복합키 설정 방법

1. @Embeddable
2. @IdClass
이렇게 두가지가 있는데 1번 사용

@Embeddable 어노테이션 추가한 Id 클래스 생성

@NoArgsConstructor
@AllArgsConstructor
@Embeddable
public class MemberId implements Serializable {

    @Column(name = "MB_NAME")
    private String name;

    @Column(name = "MB_BIRTHDAY")
    private String birthday;
}

Serializable 인터페이스를 구현한 클래스를 생성

@EmbeddedId로 엔티티에 추가

@Getter
@Entity
public class Member {

    @EmbeddedId
    private MemberId memberId;
    
    private String address;
    
    ...
}

+ 맵핑할 때 컬럼 설정

@Getter
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Application {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long applicationId;

    private String title;
    
    private String content;
    
    ...
    
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumns({
        @JoinColumn(name = "MB_NAME"),
        @JoinColumn(name = "MB_BIRTHDAY")
    })
    private Member member;
}


참고
https://kimseungjae.tistory.com/12

JPA 복합키를 사용 하는 방법 2가지

대부분의 엔티티에는 @Id 애노테이션을 한 개 사용한다. 하지만 테이블의 키가 복합키로 이뤄져 있다면 엔티티를 설계할 때에 이를 고려해야 한다. 복합키 설정 방법은 두 가지가 있다. 1. @Embeddab

kimseungjae.tistory.com