본문 바로가기
Spring

[Spring/MyBatis] No constructor found in ~ matching 오류

by noddu 2025. 2. 10.
728x90
반응형

 

문제 상황
java.lang.Exception: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in egovframework.root.tossPayment.dto.OrderDto matching [java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.lang.String, java.lang.String]

MyBatis를 사용하여 selectPayment 쿼리를 실행할 때 다음과 같은 예외가 발생했습니다.

 

OrderDto.java

@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@ToString
@Getter
public class OrderDto {
    private String userId;
    private String paymentKey;
    private String orderId;
    private long amount;
    private String status;
    private String ip;
}

OrderDto 클래스는 다음과 같습니다.

 

TossPaymentSQL.xml

<select id="selectPayment" resultType="OrderDto">
    select user_id
         , order_payment_key
         , order_id
         , order_amount
         , order_status
         , order_ip
    from tu_order
    where order_id = #{orderId}
</select>

MyBatis 매퍼 XML에 정의된 selectPayment 쿼리는 다음과 같습니다

 

문제 원인

OrderDto의 amount 필드는 long 타입으로 정의되어 있지만,

예외 메시지에서 보면 MyBatis는 order_amount 컬럼을 Integer로 매핑하려고 합니다.

 

DB를 확인해보면 order_amount의 Data Type은 int입니다.

 

OrderDto 생성자가 long 타입의 amount를 받지 못해 예외가 발생한 것입니다.

 

해결
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@ToString
@Getter
public class OrderDto {
    private String userId;
    private String paymentKey;
    private String orderId;
    private Integer amount;
    private String status;
    private String ip;
}

private long amount의 타입을 Integer로 변경해

MyBatis와 OrderDto 간의 타입 불일치를 해결했습니다.

반응형