JPA-09 JOIN

yj k·2023년 4월 11일
0

jpa

목록 보기
11/14

조인의 종류

  1. 일반 조인 : 일반적인 SQL 조인을 의미(내부 조인, 외부 조인, 컬렉션 조인, 세타 조인)

  2. 패치 조인 : JPQL 안에서 성능 최적화를 위해 제공하는 기능으로 연관된 엔티티나 컬렉션을 한 번에 조회할 수 있다.
    지연 로딩이 아닌 즉시 로딩을 수행하며 join fetch 명령어를 사용한다.


연관관계가 설정된 상태에서 테스트한다.


일반조인_내부 조인

Menu 엔티티에 대한 조회만 일어나고 Category 엔티티에 대한 조회는 나중에 필요할 때 일어난다.(지연로딩)
select의 대상은 영속화하여 가져오지만 조인의 대상은 영속화하여 가져오지 않는다.


일반조인_컬렉션 조인

컬렉션 조인은 의미상 분류된 것으로 컬렉션을 지니고 있는 엔티티를 기준으로 조인하는 것을 말한다.

@Test
	public void 컬렉션조인을_이용한_조회_테스트() {
		
		/* 컬렉션 조인은 의미상 분류된 것으로 컬렉션을 지니고 있는 엔티티를 기준으로 조인하는 것을 말한다. */
		
		//when
		String jpql = "SELECT c.categoryName, m.menuName FROM section06_category c LEFT JOIN c.menuList m";
        //JOIN c.menuList -> category class가 가진 필드
		
		List<Object[]> categoryList = entityManager.createQuery(jpql, Object[].class).getResultList();
		
		//then
		assertNotNull(categoryList);
		categoryList.forEach(row -> {
			
			Stream.of(row).forEach(col -> System.out.print(col + " "));
			System.out.println();
			
		});
		
	}

일반조인_세타 조인

세타 조인은 조인되는 모든 경우의 수를 다 반환하는 크로스 조인과 같다.


페치 조인

페치 조인을 하면 처음 SQL 실행 후 로딩할 때 조인 결과를 다 조회한 후 뒤에 사용하는 방식이기 때문에 쿼리 실행 횟수가 줄어들게 된다.(지연로딩X)
대부분의 경우 성능이 향상된다.

String jpql = "SELECT m FROM section06_menu m JOIN FETCH m.category c";

0개의 댓글