묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! Querydsl
@QueryProjection 추가 후 빌드시 에러
안녕하세요 강의 완강 후 차근차근 프로젝트에 적용해보고있는데요 QueryProjection 어노테이션을 추가하면 빌드 실패가 되고 있는데 어떤 부분을 찾아봐야할까요? 감사합니다
-
해결됨실전! Querydsl
QueryProjection 수동으로 만들면 어떨까요?
안녕하세요! 초보개발자 명아주입니다. QueryProejction 사용 시, DTO가 QueryDSL 에 의존적인게 단점이라고 하셨습니다. 그 외에는 컴파일 레벨에서 체크할 수 있다는게 정말 큰 장점인 것 같습니다. 그래서 혹시 의존성을 갖지 않으면서 이걸 사용할 방법이 없을까? 라는 의문으로 한가지 테스트를 해보고 찾은 해결 방법은 CustomQUserDto 를 직접 만들어서 쓰면 어떨까 싶습니다. CustomQUserDto는 레포지토리 계층에서만 쓰고, 반환값은 UserDto로 나가니까 서비스에서는 CustomQUserDto를 몰라도 상관이 없을것 같다고 생각했습니다. package study.querydsl.repository.dto;import com.querydsl.core.types.ConstructorExpression;import com.querydsl.core.types.Expression;import com.querydsl.dto.UserDto;public class CustomQUserDto extends ConstructorExpression<UserDto> { public CustomQUserDto(Expression<String> name, Expression<Integer> age) { super(UserDto.class, new Class<?>[]{String.class, int.class}, name, age); //혹은 심플하게 super(UserDto.class, name, age); 라고 해도 됩니다. }} 샘플코드는 자동생성된 QMemberDto를 참고해서 이렇게 짜봤습니다. serialVersionUID는 어떻게 처리해야될지 몰라서 없앴고 없어도 테스트 상에서는 문제없었습니다. @Testpublic void findUserDtoByManualQueryProjection() throws Exception { //given //when List<UserDto> result = query .select(new CustomQUserDto(member.username, member.age)) .from(member) .fetch(); //then for (UserDto userDto : result) { System.out.println("userDto = " + userDto); }} 위처럼 테스트를 진행해봤을때 정상적으로 동작하는걸 확인했는데요. 혹시 이런식으로 QueryProjectionDto를 수동으로 만들어서 사용하시는 경우가 있으신지 궁금합니다. 감사합니다. 명아주 드림 새해 복많이 받으세요~~~~ p.s 한가지 질문드리고 싶은점이 있는데, 강의들으면서 따라 치는 코드를 깃허브에 올리고 있는데 혹시 문제가 된다면 비공개 레포로 변경하려고 합니다. 답변 주시는 대로 원하시는대로 처리하겠습니다!