Spring Data JPA의 복합키

몽루문·2024년 3월 18일
0

Spring Data JPA

목록 보기
5/7
post-thumbnail

📝 Spring Data JPA - 복합키

Spring Data JPA의 복합키를 설정해보려고 한다.
말이 거창하게 복합키이지 쉽게 말하면 커스텀 키라고 생각하면 될 것 같다.
DataBase를 설계하다 보면 PK가 두개가 필요하거나 FK가 두개로 다른 Table과 연관될 때가 있다.
이럴때 복합키를 사용하여 Spring Data JPA에 연관관계를 표시할 수 있다.
복합키를 사용하는 방법은 @Embeddable Annotation과 @IdClass Annotation을 사용하는 방법이 있는데, 나는 @Embeddable Annotation을 이용하는 방법을 정리해보려고 한다.




🚩 @Embeddable

@Embeddable Annotation을 사용하는 방법은 아주 단순하다.

  1. 사용하려는 두 개 이상의 Field를 가지고 있는 Class를 선언하고 Serializeble Class를 상속받는다.
  2. 해당 클래스에 @Embeddable Annotation을 선언하면 된다.
  3. @EmbeddedId Annotation을 사용하여 복합키와 Entity를 결합한다.

■ 복합키 Class 선언

/// 사용자의 연락처와 이름을 동시에 PK로 잡고 싶은 경우
@Data
@Embeddable
class UserCustomKey implements Serializeble {
	@Column(name = "user_name")
    private String userName;
    
    @Column(name = "phone_number")
    private String phoneNumber;
}

■ 복합키 + Entity 결합

@Entity(name = "user_info")
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class UserInfo {
	@EmbeddedId
	private UserCustomKey userKey;
}

🚩 Repository 선언

복합키를 사용한 Spring Data JPA Repository 선언은 다음과 같다.

public interface UserInfoRepository extends JpaRepository<UserInfo, UserCustomKey> {
	 Optional<UserInfo> findByUserName(String userName);
     
     Optional<UserInfo> findByPhoneNumber(String phoneNumber);
}





📌 마무리

JPA를 처음 접할 때는 막연히 복합키가 너무 어렵고 @MapsId Annotation과의 응용도 힘들었는데 사용하다보니까 자연스럽게 익혀진거 같다. 연관관계에 관해서는 어느정도 이해가 된것같다.
JPA의 성능에 관해서도 기록을 해야될 것 같고 뒤쳐지지 않으려면 열심히 공부해야한다고 느끼고 있다.

profile
알고 있는 것을 정리하고, 새로운 것을 알기위해 끄적이는곳..

0개의 댓글