해결된 질문
작성
·
430
1
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); 라고 해도 됩니다.
}
}
@Test
public 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);
}
}
답변 1
1
새해 복 많이 받으세요. 명아주님^^
이 코드에서도 ConstructorExpression을 사용하는데요. 이 부분 자체가 Querydsl 코드에 의존하게 됩니다.
다음 import를 참고해주세요.
import com.querydsl.core.types.ConstructorExpression;
import com.querydsl.core.types.Expression;
따라서 해당 문제가 해결되는 것은 아닙니다. 그래도 이렇게 고민하신 부분은 너무 좋네요.
추가로 소스코드는 유료 강의이기 때문에 비공개로 사용해주세요^^
감사합니다.
안녕하세요. 초보개발자 명아주입니다.
UserDto는 별도로 있고, CustomQUserDto를 만들었기때문에 UserDto 자체는 의존하지 않지만, CustomQUserDto는 Querydsl에 의존하고 있다고 생각했습니다.
뭔가 UserDto를 변경하거나 하면 CustomQUserDto도 따라서 변경해줘야되는 등 번거로움이 있긴 한것 같습니다.
이 부분은 뭔가 더 깔끔한 유틸클래스를 만들어서 해결할 방법이 없을지 고민해보겠습니다!
소스코드 레포지토리는 모두 비공개로 변경했습니다!
감사합니다!! 즐거운 연휴 보내세요~~