Spring

16. 경로 표현식 / 페치조인

공대키메라 2021. 7. 25. 16:42

 

  • 상태 필드(state field) : 단순히 값을 저장하기 위한 필드
  • 연관 필드(association field): 연관관계를 위한 필드  

  - 단일 값 연관 필드:

   @ManyToOne, @OneToOne, 대상이 엔티티

  - 컬렉션 값 연관 필드:

   @OneToMany, @ManyToMany, 대상이 컬렉션

 

 

 

아예 묵시적 내부 조인 안쓰는게 좋암~~!!! => 나중에 유지보수가 힘듬

 

 

 

페치 조인(이거는 실무는 엄청 중요함)

  •  SQL 조인 종류 X
  • JPQL에서 성능 최적화를 위해 제공하는 기능
  • 연관된 엔티티나 컬렉션을 SQL한 번에 함께 조회하는 기능
  • join fetch 명령어 사용
  • 페치 조인 ::= [LEFT [OUTER] | INNER] JOIN FETCH 조인경로

 

 

package jqpl;

import javax.persistence.*;
import java.util.List;

public class JapMain {

    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpql");
        EntityManager em = emf.createEntityManager();

        EntityTransaction tx = em.getTransaction();
        tx.begin();

        try {
            Team teamA = new Team();
            teamA.setName("teamA");
            em.persist(teamA);

            Team teamB = new Team();
            teamB.setName("teamB");
            em.persist(teamB);

            Member member = new Member();
            member.setUsername("회원1");
            member.setTeam(teamA);
            em.persist(member);

            Member member2 = new Member();
            member2.setUsername("관리자2");
            member2.setTeam(teamB);
            em.persist(member2);

            Member member3 = new Member();
            member3.setUsername("관리자2");
            member3.setTeam(teamB);
            em.persist(member3);

            em.flush();
            em.clear();

            String query = "select m From Member m join fetch m.team";

            List<Member> resultList = em.createQuery(query, Member.class).getResultList();

            for (Member member1 : resultList) {
                System.out.println("member1.getUsername() +  = " + member1.getUsername() +  ", " + member1.getTeam().getName());
                
            }

            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            em.clear();
        }
        emf.close();
    }

}

 

 

 

 

 

 

 

 

  

'Spring' 카테고리의 다른 글

스프링부트 & jpa1 / 2 - 요구사항 분석  (0) 2021.07.26
스프링부트 & jpa1 / 1 - 프로젝트 생성  (0) 2021.07.25
15. 조인  (0) 2021.07.24
14. 기본 문법과 쿼리 API  (0) 2021.07.24
13. 객체지향 쿼리 언어(JPQL)  (0) 2021.07.24