ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @EntityGraph
    스파르타코딩클럽/스프링 팀 프로젝트 - Trello 2023. 12. 29. 16:31

     

     

    어떻게 EntityGraph를 알게 되었나

    지금 프로젝트에서 보드 Read을 구현하기 위해서는

    보드를 가져올때  컬럼 (이하 카테고리) 과 

    컬럼 안에 들어있는 카드의 제목, 이미지, 배경색, 댓글 수, 협업자 에 대한 정보를 가져와야했다.

     

    하지만 게시판과 카탈로그는 연관관계가 설정되어 있지만,

    게시판과 카드는 연관관계가 설정되어 있지 않기에   카탈로그를 통해 카드의 정보를 가져와야했다.

     

    처음에는 단순히 Card 정보를 받아오는 ResponseDto를 생성하여

    그 안에 값을 다 집어넣으려고 하였다.

     

    그러나 생각을 할 수록 연관관계를 맺지 않은 엔티티에서 정보를 잘 가져오는 것이 쉽지 않아보여서

    어떻게 이것을 해결할지 튜터님을 통해 정보를 얻어내었고

     

    그것이 @EntityGraph 이다.

     

     


     

     

    @EntityGraph 란?

    간단히 말하면 엔티티를 조회할때 연관된 엔티티들을 어떻게 가져올지 선언하는 방법이다.

    이 애너테이션을 사용하면 JPA는 쿼리문을 생성할 때 지정한 연관 엔티티를 함께 조회한다.

     

    연관관계가 지연로딩으로 되어있을 경우 fetch 조인을 사용하여 여러번의 쿼리를 한번에 해결 할 수 있는데

    이를 Data JPA에서 애너테이션으로 쓸 수 있도록 만든 기능이다.

     

     


     

    @EntityGraph 타입

     

    EntityGraph.EntityGraphType.FETCH
    EntityGraph.EntityGraphType.LOAD

     

    두 가지가 있다.

     

    FETCH는 엔티티그래프에 적힌 것들은 EAGER로,  나머지는 LAZY로 로딩한다.

    LOAD는  적힌것들은 EAGER,  나머지는 기본으로 지정된 타입으로 처리한다.

     

     


     

     

    결론

     

    에러나서 못씀

     

    +  왜 쓰지 못했는가

    나는  보드 - 카테고리 - 카드 - 댓글 까지 조회해 오려했지만

    보드와 실제로 연관관계를 맺고 있는 것은 카테고리 뿐이었다.

     

    그래서 EntityGraph 만으로는 조회가 불가능하고

    엔티티그래프에서  subgraphs 속성을 정의해서 사용해야 했는데

    그러기엔 시간이 너무 아까워서 다음에 사용해보는걸로 

Designed by Tistory.