-
@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 속성을 정의해서 사용해야 했는데
그러기엔 시간이 너무 아까워서 다음에 사용해보는걸로
'스파르타코딩클럽 > 스프링 팀 프로젝트 - Trello' 카테고리의 다른 글
24/01/03 잼렐로 KPT (1) 2024.01.03 CascadeType.ALL 과 REMOVE의 차이 (0) 2023.12.27 심화프로젝트 프로젝트협업툴 만들기 1일 (0) 2023.12.26