작성
·
773
0
안녕하세요 영한님! 저는 강의 후에 개인 프로젝트를 진행중인데요
@Column(nullable = false)
@ElementCollection
private List<Tech> techs;
Post class에 해당 Enum type List가 있습니다.
package project.como.domain.post.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum Tech {
Java("Java"),
Spring("Spring");
private String stack;
}
그런데 Projections.constructor 방식으로 Dto를 만들때 에러가 발생합니다.
List<PostAbstractResponseDto> content = queryFactory
.select(Projections.constructor(PostAbstractResponseDto.class,
post.title,
post.category,
post.state,
post.techs
))
.from(post)
.where(stateEq(condition.getState()),
categoryEq(condition.getCategory()),
techsContains(condition.getTechs()))
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();
post.techs와 조건식을 제외하고 조회할 때는 정상적으로 잘 동작하지만, post.techs를 넣는 경우에 argument type mismatch 에러가 발생하네요.
무슨 문제인지 궁금합니다. 감사합니다 :)
답변 2
0
안녕하세요. gksrhs97님
도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.
실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.
주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요
추가로 다음 내용도 코멘트 부탁드립니다.
1. 문제 영역을 실행할 수 있는 방법
2. 문제가 어떻게 나타나는지에 대한 상세한 설명
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요.
에러 메시지를 보면 “argument type mismatch” 오류가 발생한 것 같아요. 이는 프로젝션 생성자 방식으로 Dto를 만들 때 techs 필드에 대한 타입이 일치하지 않는다는 의미에요.
문제를 해결하기 위해서는 프로젝션 생성자의 PostAbstractResponseDto 클래스에 대한 생성자를 수정해야 해요. 타입이 일치하도록 List
예를 들어, PostAbstractResponseDto 클래스에 다음과 같은 생성자를 추가해보세요.
@AllArgsConstructor
public class PostAbstractResponseDto {
private String title;
private String category;
private String state;
private List
// 기본 생성자
public PostAbstractResponseDto() {
}
// 모든 필드를 초기화하는 생성자
public PostAbstractResponseDto(String title, String category, String state, List<Tech> techs) {
this.title = title;
this.category = category;
this.state = state;
this.techs = techs;
}
}
이렇게 생성자를 추가하고 나면 프로젝션 생성자에서 해당 생성자를 사용할 수 있게 될 것입니다.
해당 수정을 통해 오류가 해결되길 바랍니다. 추가 질문이 있으시면 언제든지 물어보세요. 좋은 하루 보내세요!
이미
@NoArgsConstructor, @AllArgsConstructor 롬복을 사용중이었고 혹시 몰라 어노테이션 빼고 기본 생성자, 모든 필드 생성자 달아줘도 똑같은 에러가 납니다.