작성
·
97
·
수정됨
0
DTO 쿼리 작성 시 join fetch
로 작성하는 경우는 에러가 발생하고 join
으로 작성하는 경우에는 에러가 발생하지 않았는데요. join fetch
의 개념은 결국 지연로딩을 작동시키지 않고 한 번에 연관된 것들 다 가져온다는 것인데 왜 여기선 안 되는 것인지 궁금합니다.
엔티티 @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);
}
}
감사합니다
다시 한 번 짚고 넘어갈 수 있었습니다