스터디 조회

Yuri Lee·2020년 11월 19일
0

타임리프- Variable Expression에서 객체의 메소드 호출 가능

메서드를 호출하는 게 가능하다. 타임리프가 지원한다. 얼마든지 Study에다가 method를 구현해서 사용할 수 있다. principal 정보는 Useraccount 이기 때문에 이 타입으로 받을 수 있다. 이 타입으로 받으면 Useraccount에는 account를 꺼낼 수 있다. account에 접근이 가능해진다.

th:utext 를 하면 html을 랜더링 해서 보여준다!

뷰를 변경할 때마다 발생하는 쿼리

  • 어차피 조회할 데이터라면 쿼리 개수를 줄이고 join을 해서 가져오자.
  • Left outer join으로 연관 데이터를 한번에 조회할 수도 있다.

study를 조회할 때 스터디가 연결되어있는 데이터를 가져와야 한다. findByPath를 사용할 때 , 필요한 정보를 같이 조인해서 가져올 수 있다.

EntityGraph?

엔티티들은 서로 연관되어 있는 관계가 보통이며 이 관계는 그래프로 표현이 가능합니다. EntityGraph는 JPA가 어떤 엔티티를 불러올 때 이 엔티티와 관계된 엔티티를 불러올 것인지에 대한 정보를 제공한다. @EntityGraph의 type은 EntityGraph.EntityGraphType.FETCH와 EntityGraph.EntityGraphType.LOAD 2가지가 있다.

  • FETCH: entity graph에 명시한 attribute는 EAGER로 패치하고, 나머지 attribute는 LAZY로 패치
  • LOAD: entity graph에 명시한 attribute는 EAGER로 패치하고, 나머지 attribute는 entity에 명시한 fetch type이나 디폴트 FetchType으로 패치 (e.g. @OneToMany는 LAZY, @ManyToOne은 EAGER 등이 디폴트이다.)

@NamedEntityGraph: @NamedEntityGraph 어노테이션은 재사용할 여러 엔티티 그룹을 정의할 때 사용한다. 이 그룹을 정의하는 목적은 Repository 인터페이스 메서드에 적용되는 @EntityGraph 어노테이션이 이 엔티티 그룹에 대한 정보를 받아와 연관 엔티티 로딩 시 어떤 정책 취할 것인가를 정할 수 있는 데에 있다.

Lazy & Eager 전략

lazy 전략일 때는 록시를 들고 온다. 즉 연결된 빈 객체를 들고 오는 것, eager 전략일 경우에는 객체를 바로 들고 온다.

  • eager으로 끝나는 것은 eager
  • many로 끝나는 것은 lazy

약간 복잡한 쿼리를 디비에 보내더라도 쿼리 개수를 줄이는 방법을 택하겠다. -> 쿼리가 1개만 발생하게 됨!


출처 : 인프런 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발
https://engkimbs.tistory.com/835
https://blog.leocat.kr/notes/2019/05/26/spring-data-using-entitygraph-to-customize-fetch-graph

profile
Step by step goes a long way ✨

0개의 댓글