OrderQueryRepository 에러
561
작성한 질문수 10
OrderItemQueryDto와 OrderQueryDto를 생성한 후, OrderQueryRepository를 생성하여 학습하고 있는데 강의 내용과는 다르게 진행중입니다. (밑에 질문 글에 한번 올렸었습니다.)
스프링데이터JPA로 진행하다보니 @Query를 작성하여 연습하는 중
java.lang.IllegalStateException: Cannot instantiate class 'jaein.crudpractice.repository.order.query.OrderItemQueryDto' (it has no constructor with signature [java.lang.Long, java.lang.String, java.time.LocalDateTime, java.time.LocalDateTime], and not every argument has an alias)
자꾸 생성자쪽에서 문제가 발생합니다.
OrderItemQueryDto
package jaein.crudpractice.repository.order.query;
import com.fasterxml.jackson.annotation.JsonIgnore;
import jaein.crudpractice.domain.OrderItem;
import lombok.Data;
@Data
public class OrderItemQueryDto {
@JsonIgnore
private Long orderId;
private String itemName;
private int count;
public OrderItemQueryDto(Long orderId, String itemName, int count) {
this.orderId = orderId;
this.itemName = itemName;
this.count = count;
}
}
OrderQueryDto
package jaein.crudpractice.repository.order.query;
import jaein.crudpractice.domain.Order;
import jaein.crudpractice.domain.OrderItem;
import jaein.crudpractice.domain.OrderStatus;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Data
@EqualsAndHashCode(of = "orderId")
public class OrderQueryDto {
private Long orderId;
private String name;
private LocalDateTime loanDate;
private LocalDateTime returnDate;
private List<OrderItemQueryDto> orderItems;
public OrderQueryDto(Long orderId, String name, LocalDateTime loanDate, LocalDateTime returnDate, List<OrderItemQueryDto> orderItems) {
this.orderId = orderId;
this.name = name;
this.loanDate = loanDate;
this.returnDate = returnDate;
this.orderItems = orderItems;
}
}
OrderQueryRepository
package jaein.crudpractice.repository.order.query;
import jaein.crudpractice.domain.Order;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface OrderQueryRepository extends JpaRepository<Order, Long> {
@Query("select distinct new jaein.crudpractice.repository.order.query.OrderQueryDto(" +
"o.id, s.name, o.loanDate, o.returnDate, oi) " +
"from Order o " +
"join o.student s " +
"join o.orderItems oi")
List<OrderQueryDto> findOrderQueryDtos(Pageable pageable);
@Query("select distinct new jaein.crudpractice.repository.order.query.OrderItemQueryDto(" +
"oi.order.id, i.name, oi.count)" +
" from OrderItem oi " +
" join oi.item i " +
" where oi.order.id = :orderId")
List<OrderItemQueryDto> findOrderItems(@Param("orderId") Long orderId);
}
생성자도 다 맞게 작성했는데 어느부분이 잘못됐는지 모르겠습니다.
강의대로 EntityManager를 사용하여 해보아도 같은 에러가 발생합니다.
도메인에서 연관관계 매핑에서 문제가 있는걸까요??
답변 1
0
안녕하세요. wodlszz님, 공식 서포터즈 David입니다.
java.lang.IllegalStateException: Cannot instantiate class 'jaein.crudpractice.repository.order.query.OrderItemQueryDto' (it has no constructor with signature [java.lang.Long, java.lang.String, java.time.LocalDateTime, java.time.LocalDateTime], and not every argument has an alias)
오류 메시지를 읽어보면, OrderItemQueryDto에는 Long, String, LocalDateTime, LocalDateTime을 시그니처로 가지는 생성자가 없다고 합니다.
즉, OrderItemQueryDto(Long long, String string, LocalDateTime localDateTime1, LocalDateTime localDateTime2)와 같은 형태의 생성자가 없다는 뜻입니다.
어디선가 위와 같은 형태로 생성자를 작성하셨기 때문에 발생한 문제로 보이며, 없는데 동일한 증상이 발생한다면 빌드 폴더를 삭제 후 다시 빌드하신 뒤 시도해 주세요:)
감사합니다.
0
OrderQueryDtos에서 orderItems를 List<OrderItemQueryDto> 타입으로 받아서 생기는 문제인건 확인했습니다.
그렇게 되면 @Query에는 어떤식으로 변화를 주어야하는지 궁금합니다.
강의 관련 외 질문입니다.
0
66
2
SpringBoot4 + Hibernate7 모듈 등록 방법 공유
0
90
1
BeanCreationException
0
88
3
Update 후 UpdateMemberResponse 매핑할 때
0
47
1
트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?
0
99
2
페이징 + 검색조건 관련해서 질문드립니다.
0
70
1
Query Dsl Q파일 질문입니다.
0
82
1
루트 쿼리라는것은
0
58
1
메서드를 분리하는 기준
0
63
1
findAllWithMemberDelivery 메서드 질문드립니다.
0
110
3
연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략
0
84
2
fetch join과 영속화와 OSIV의 관계
0
86
2
Distinct 사용 전 결과에 대한 의문
0
113
2
레포지토리 계층에서의 트랜잭션에 대한 의문
0
57
1
영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.
0
78
2
dto 필드 속 엔티티 여부
0
60
1
뷰템플릿 사용 시
0
76
2
Result 클래스 관련 질문
0
56
1
@PostConstruct 프록시 관련 질문드립니다
0
86
1
DTO 대신 Form 사용은 안되나요?
0
135
1
OSIV ON 상태일 때
0
96
1
fetch join VS fetch join 페이징 궁금증
0
180
2
양방향 연관관계 알아보는 법?
0
105
1
16강 17강 간단 정리 이게 맞을까요 ?
0
165
2





