본문 바로가기

스프링 독학 여정

JPA fk column으로 findBy하기

외래키인 id로 DAO에서 findBy하고 싶을때는 어떻게 할까?

외래키 column은 type이 Entity여서 일반 값으로는 작동되지 않았다.

* Item Entity

@Entity //엔티티
@Table(name = "item")
public class Item {
    //핵심 column만 남김
    @Id //primary key
    @GeneratedValue(strategy = GenerationType.IDENTITY) //auto_increment
    @Column(name = "item_id")
    private Long itemId; //상품 고유 id

    @Column(columnDefinition = "text[]")
    @Type(type = "mirim.itshow.kiru.entity.hibernatesetting.CustomStringArrayType")
    private String[] clothSize; //옷 사이즈

    @ManyToOne
    @JoinColumn(name = "category")
    private Category category; //카테고리 id
}

Category가 외래키이기 때문에 Category Entity 타입이다.

 

* Category Entity

@Entity //엔티티
@Table(name = "category")
public class Category {
    @Id //primary key
    @Column
    private Long categoryId; //카테고리 고유 id

    private Long idParent; //부모 카테고리 id

    @Column(nullable = false, length = 10)
    private String title; //카테고리 이름

//생성자 생략
}

ItemRepository에서 Category로 findBy를 할 거다

 

public interface ItemRepository extends JpaRepository<Item, Long> {
    List<Item> findByCategory_CategoryId(Long categoryId);
}

규칙이 있다!!!!!!
findBy테이블이름_열이름(열데이터타입 매개변수명);


단, 테이블이름이나 열이름이나 원래 이름과 상관 없이 대문자로 시작해야 한다.

카테고리 테이블을 다시 살펴보면

    @Id //primary key
    @Column
    private Long categoryId; //카테고리 고유 id

테이블 이름이 Category이고 기준이 될 열 이름이 categoryId이기 때문에
findByCategory_CategoryId()가 된다

이 메서드를 호출할때에는 findBy의 기준이 될 column만 받으면 된다~!!

 

참고 블로그

'스프링 독학 여정' 카테고리의 다른 글

HTTP header, body란?  (0) 2023.05.31
JPA 배열 column 만들기  (0) 2023.05.18
스프링 입문 독학 :: day1 - 1.프로젝트 생성  (0) 2023.01.03