[JPA] ORM 에서 복합키가 필요할 때

charco·2021년 9월 2일
0

나도TIL

목록 보기
18/55
post-thumbnail

간혹 여러개의 칼럼을 조합해 기본키로 써야 하는 경우가 있다.
이러한 키를 복합키라고 하는데 JPA에서는 객체지향적으로 복합 키를 지정할 수 있다.

@Embeddable

@Embeddable 애노테이션은 클래스에 붙힌다.
이 애노테이션이 붙은 클래스는
다른 엔티티 클래스에 내장되어 복합 키가 된다.

@EmbeddedId

@EmbeddedId 애노테이션은 필드에 붙힌다.
위에서 말한 @Embeddable 이 붙은 클래스를 복합키로
갖는 엔티티 클래스에서 복합키 필드에 붙힌다.


예제

모든 사람의 이름이 전부 다르다는 가정 하에
Member이라는 테이블이 있다고 생각해보자.
Member의 성과 이름으로 복합키를 지정하고 싶다고 해보자.


MemberId.java

@Embeddable
public class MemberId implements Serializable {

    private String firstName;
    private String lastName;

    // standard getters and setters
}

먼저 복합키에 해당하는 클래스를 만든다.


Member.java

@Entity
public class Member {

    @EmbeddedId
    private MemberId;
    private Integer age;
    private String phone;
    private String city;

    //standard getters and setters
}

그리고 고객 엔티티 클래스에서 이 클래스를 복합키로 사용한다.


MemberRepository.java

@Repository	
public interface MemberRepository extends JpaRepository<Member, MemberId> {

    List<Member> findByIdFirstName(String firstName);

    List<Member> findByIdLastName(String lastName);
}

JpaRepository 에서 복합키로 Member을 검색하고 싶다면 이렇게 메서드 이름을 지어주면 된다.


나는 파일 업로드를 구현하다가 UUID 와 파일 이름으로 복합 키를 생성해야 하는 문제를 맞닥뜨려 알아보게 되었다.

profile
아직 배우는 중입니다

0개의 댓글