스프링 프로젝트 진행 중 외래키를 사용해 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라는 메소드를 생성하여 사용하면 되는 것이다.
참조
'개발 > 스프링 개념' 카테고리의 다른 글
[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 |