개발/스프링 개념

[Spring] Spring JPA FindByFK (외래키로 조회)

용꿀 2023. 2. 15. 22:44

스프링 프로젝트 진행 중 외래키를 사용해 DB 내의 정보를 찾아와야 할 경우가 생겼다.

FindBy와 외래키를 동시에 사용해본 적이 없어 이에 대해 정리해보고자 한다.

 

먼저 엔티티 클래스는 다음과 같다.

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@IdClass(ReviewLikeId.class)
public class ReviewLike extends BaseTimeEntity implements Serializable {

    @Id
    @ManyToOne(targetEntity = Review.class, fetch = FetchType.LAZY)
    @JoinColumn(name = "reviewId")
    private Review review;

    @Id
    private Long userId;
}

위에서 확인할 수 있듯이 Review 테이블을 참조하는 reviewId라는 필드가 존재한다.

 

그렇다면 reviewId를 사용하여 DB에서 ReviewLike 정보를 불러오기 위해선 어떻게 해야 할까?

public interface ReviewLikeRepository extends JpaRepository<ReviewLike,ReviewLikeId> {
    List<ReviewLike> findByReview_ReviewId(Long reviewId);
}

위와 같이 JpaRepository를 상속한 Repository 계층에서 다음과 같이 선언한 후 이를 Service 계층에서 사용하면 된다.

 

규칙은 다음과 같다.

findBy + "FK가 참조하는 엔티티명" + "_" + "FK가 참조하는 엔티티의 ID 필드명(첫글자 대문자)"

예를 들어 Product 엔티티의 productId를 참조하는 외래키를 사용하여 FindBy를 수행하고 싶다면 Repository 계층에서 findByProduct_ProductId라는 메소드를 생성하여 사용하면 되는 것이다.

 

참조

https://penpen.tistory.com/entry/Spring-Data-JPA-Repository-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%BF%BC%EB%A6%AC-FK-%EB%A1%9C-findBy-%EB%A7%8C%EB%93%A4%EA%B8%B0

 

[Spring] Spring Data JPA_ Repository 메소드 쿼리_ FK 로 findBy 만들기.

TOPIC : Spring Data JPA 도메인이 다음과 같을 때, @Data @Entity public class Comment { @Id @GeneratedValue private int id; @Column(nullable = false) private String nickname; @Column(nullable = false) private String password; @Column(nullable = fal

penpen.tistory.com