[JPA] Entity Graph

Junseo Kim·2020년 4월 1일
0

Entity Graph

쿼리 메서드마다 연관 관계의 fetch모드를 유연하게 설정할 수 있는 기능을 제공해준다.

연관관계(OneToMany, ManyToOne 등)에 제공할 수 있다.

끝이 One으로 끝나는 연관관계는 기본값이 EAGER모드이고, 끝이 Many로 끝나는 연관관계는 기본값이 LAZY이다.(임의로 모드를 바꿀 수 있다.)

아래와 같이 Post와 Comment가 있고 Comment가 Post의 값을 가지고 있다고 하자.

EAGER 같은 경우는 참조하고 있는 다른 엔티티의 값도 가져온다.(Comment를 조회하였지만, 자동으로 Post의 정보들도 가져온다.)

Lazy 같은 경우는 자기 자신만 가져온 후, 참조하고 있는 다른 엔티티에 접근하면 그때야 다시 쿼리를 날린다.(Comment 조회시 해당 comment 정보들만 가져온다.)

참고: JPA-Fetch

@NamedEntityGraph

기본은 Lazy지만, EAGER로 정보를 가져오고 싶을 때가 있을 수도 있다.

이런 경우에 @NamedEntityGraph를 사용해 줄 수 있다. 연관 관계들만 정의해준다.

@NamedEntityGraph(name = "이 그래프의 이름", attributeNodes = @NamedAttributeNode("연관관계 이름"))

실제로 정의해준 연관관계를 사용하는 곳은 repository이다.

이렇게 해주면, 설정해줬던 post는 EAGER 모드로 가져오게 된다.

0개의 댓글