인프런 커뮤니티 질문&답변

H K님의 프로필 이미지
H K

작성한 질문수

실전! 스프링 데이터 JPA

@EntityGraph

EntityGraph

작성

·

386

0

안녕하세요 이해가 조금 안가는 부분이 있어서 글 질문드립니다.
 
17:53쯤 보시면
findAll() 메서드는 JpaRepository 인터페이스가 가지고 있는 메서드 입니다. 그런데
 
@Override @EntityGraph(attributePaths = {"team"}) List<Member> findAll();
 
이렇게만 적어 주셨는데 이게 왜 쿼리가 되는지가 신기합니다..
 
오버라이드 해서 따로 쿼리문을 적어주지 않으시고(쿼리를 재정의 하지 않으시고)
team 만 연관짓게 해주셨는데..
어떻게 Member 엔티티를 다 끌고 오는것인가요..
findBy... 이런 메소드 이름으로 가져오는 형태도 아닌데
이게 궁금합니다
 
두번째 질문입니다.
21:29 마지막 부분에서 Member.all 같은
@NamedEntityGraph 메서드는
@NamedQuery 와는 다르게 query="..." 를 직접 사용할수가 없더라구요.. (Member 엔티티에서) 그래서 findBy,.. 같은 이름으로 쿼리를 조회해 오는 (메서드 쿼리랑) 같이 조합해서쓸수밖에 없는거죠?
 

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. H K님

1번 질문은 hanul_kr님이 설명해주신 내용이 맞습니다. 기본 findAll() + 엔티티 그래프 기능이 적용됩니다.

2번 질문은 query를 직접 사용할 경우 엔티티그래프 대신에 fetch join을 직접 사용해주셔야 할거에요.

감사합니다.

H K님의 프로필 이미지
H K
질문자

감사합니다 쿼리문을 따로 재정의 하지 않아도 

그냥 기본 findAll() + 엔티티 그래프 기능이 되게 JPA가 지원 해주는것이였네요

0

1번은...

MemberRepository.java는 JpaRepository<T, ID>를 확장합니다 (상속받습니다)
그렇게 그 부모인 PagingAndSortingRepository, CrudRepository 보시면 될것같습니다..

쿼리 메소드 기능 들어가기 직전의 <공통인터페이스 적용> 강의에 나옵니다

H K님의 프로필 이미지
H K
질문자

네 저의 질문은 공통인터페이스에 있는건데 그걸 오버라이딩 했는데 재정의로 쿼리를 따로 만들어 주지 않았는데도 잘되는게 신기해서 질문 드렸습니다..

H K님의 프로필 이미지
H K

작성한 질문수

질문하기