TIL: 2024/06/04 - Spring Entity 복합키 표현

White 와잇·2024년 6월 5일

TIL

목록 보기
32/40
post-thumbnail

새 프로젝트 시작!

이번 주에 새로운 팀 프로젝트에 착수했다.

Spring boot 프레임워크를 사용해서 Spring Security, JWT의 인증/인가 기능을 구현하고 이를 통해 뉴스피드(게시글을 올리고, 조회할 수 있는) 웹서비스를 만든다.

요구사항 명세에 따라 여러 기능별로 팀 분담을 한 상태이다.
내가 맡은 부분은 인가받은 유효한 사용자가 게시물과 댓글에 좋아요(like)할 수 있는 기능 구현이다.

사용자 인증/인가 구현보다 간단한 부분이므로 빠른 시일내에 마무리하고 다른 기능구현도 해보려고 한다.

Spring Entity의 복합키 표현

위 테이블은 팀 내에서 결정한 좋아요 테이블인데, (사용자 ID + 게시글 ID)으로 식별가능한 것으로 판단하여 복합키를 사용하기로 하였다.

@id 두개를 하나의 엔터티에 설정하는 것은 안되더라.

Spring Entity에서 pk 설정은 @id 애너테이션으로 설정하는 방법밖에 모르고 있었기에
복합키 표현 방법, 설정 방법을 찾아보았다.

복합키 정의

먼저 복합키 클래스를 따로 정의해야한다.
1. Serializable 구현체 클래스 생성
2. 1에 복합키를 구성할 속성을 @Column 구성한다

주의점으로 위 클래스는 equal, hashCode, 기본생성자가 구현되어야한다고 한다.
-> @EqualsAndHashCode, @NoArgsConstructor 으로 편하게 해결

엔터티에서 복합키를 갖는 방법을 전반적으로 2가지의 방법을 제시한다.

  • @Embeddable, @EmbeddedId
  • @IdClass

전자의 방법을 택했다.

복합키 사용

사용 Repository에 extends JpaRepository<사용 엔터티 클래스, 복합키 클래스>

  • 쿼리메서드

    복합키로 find시에는
    findById + 복합키 중 원하는 id 컬럼

    원하는 id가 여러 개일 시에는
    findById + 복합키 중 원하는 id 컬럼1 + And + Id + 복합키 중 원하는 id 컬럼2 + And + ...

  • 사용 예시 코드

public interface PostLikeRepository extends JpaRepository<PostLike, PostLikeId> {
    Optional<PostLike> findByIdUserIdAndIdPostId(Long userId, Long postId);
}

참고 페이지

https://precious-value.tistory.com/44

profile
웹개발 도전! 데브옵스 도전!

0개의 댓글