inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

@Query, 값, DTO 조회하기

테스트 코드 문의

177

피곤한개발자

작성한 질문수 18

0

  1. DTO 쿼리 작성 시 join fetch로 작성하는 경우는 에러가 발생하고 join으로 작성하는 경우에는 에러가 발생하지 않았는데요. join fetch의 개념은 결국 지연로딩을 작동시키지 않고 한 번에 연관된 것들 다 가져온다는 것인데 왜 여기선 안 되는 것인지 궁금합니다.

  2. 엔티티 @Query문하고 DTO @Query 테스트 코드를 돌렸는데 서로 영향을 미쳐 테스트가 실패라고 뜹니다. @Transactional을 붙여 롤백이 되게끔 하여 해결은 했지만 궁금한 점이 있습니다. 스프링 데이터 JPA 테스트를 돌릴 때 @SpringBootTest 어노테이션 붙이면 자동으로 롤백이 되는 것이 아닌가요?

package study.springdatajpa.repository;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import study.springdatajpa.domain.Member;
import study.springdatajpa.domain.Team;
import study.springdatajpa.dto.MemberDto;

import java.util.List;

@SpringBootTest
class MemberRepositoryTest {

	@Autowired private MemberRepository memberRepository;
	@Autowired private TeamRepository teamRepository;

	@Test
	@Transactional
	void testQuery() {
		Member m1 = new Member("AAA", 10);
		Member m2 = new Member("BBB", 20);

		memberRepository.save(m1);
		memberRepository.save(m2);

		List<Member> result = memberRepository.findUser("AAA", 10);
		Assertions.assertThat(result.get(0)).isEqualTo(m1);
	}

	@Test
	@Transactional
	void testDtoQuery() {
		Team team = new Team("teamA");
		teamRepository.save(team);

		Member m1 = new Member("AAA", 10);
		Member m2 = new Member("BBB", 20);
		m1.setTeam(team);
		m2.setTeam(team);
		memberRepository.save(m1);
		memberRepository.save(m2);

		List<MemberDto> dtoList = memberRepository.findUserDto();
		Assertions.assertThat(dtoList.size()).isEqualTo(2);
	}
}

java spring spring-boot jpa

답변 1

0

y2gcoder

안녕하세요. dhwiwnwnf님, 공식 서포터즈 y2gcoder입니다.

 

  1. 간단하게 말씀드리면 fetch join 은 대상이 되는 연관 엔티티 까지 같이 영속화해주는 기능입니다. 즉 엔티티 대상으로 하는 기능이기 때문에 기본적으로 DTO는 대상이 아닙니다!

  2. 테스트 시 자동 롤백 기능은 테스트 코드의 @Transactional 에 달려 있습니다!

 

감사합니다.

1

피곤한개발자

감사합니다
다시 한 번 짚고 넘어갈 수 있었습니다

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

77

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

109

3

MemberRepository 구현체

0

61

1

pdf 표현 질문드립니다.

0

64

1

로그가 남지 않는 문제.

0

88

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

73

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

73

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

95

2

Sort 인터페이스는 잘 사용 안하나요?

0

52

1

스캔대상 질문드립니다.

0

46

1

하이버네이트6에서의 최적화에 이은 질문

0

88

1

save() vs saveAndFlush DB 통신 횟수

0

55

1

순수 JPA 리포지토리 코드 수정부분

0

87

2

bulk연산 후 flush하는 이유를 모르겠어요

0

153

3

bulk insert 질문입니다.

0

185

2

교만했던 것 같아요.

0

147

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

150

2

동적 테이블에 대한 질문

0

87

1

영속성 전이와 연관관계

0

132

2

강의 10:25 질문

0

75

1

단건 update 질문

0

98

2

엔티티 와 도메인의 경계

0

129

1

UsernameOnlyDto 타입 type mismatch 오류

0

122

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

137

1