용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (250)
    • 개발 (77)
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (21)
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

개발/스프링 개념

[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

'개발 > 스프링 개념' 카테고리의 다른 글

[Spring] DAO vs DTO vs VO vs Entity  (0) 2023.08.16
[Spring] Spring JPA 복합키  (0) 2023.02.10
[Spring] Session이란?  (0) 2023.01.25
[Spring] Select에 @Transaction을 사용하는 이유  (0) 2023.01.20
[Spring] Spring 웹 계층 구조  (0) 2023.01.20
    '개발/스프링 개념' 카테고리의 다른 글
    • [Spring] DAO vs DTO vs VO vs Entity
    • [Spring] Spring JPA 복합키
    • [Spring] Session이란?
    • [Spring] Select에 @Transaction을 사용하는 이유
    용꿀
    용꿀

    티스토리툴바