[SPRING] mybatis가 실행 한 oracle 프로 시저에서 매개 변수를받을 수 없습니다.
SPRINGmybatis가 실행 한 oracle 프로 시저에서 매개 변수를받을 수 없습니다.
스프링 3.0.5를 사용하여 자바 애플리케이션을 개발하고 mybatis-spring을 사용하여 데이터베이스 오라클과 작업합니다.
mybatis에 대한 인터페이스가 있습니다.
public interface SubscriberMapper {
Subscriber getSubscriberByMsisdn(String msisdn);
void insertSubscriber(Subscriber subscriber);
void updateSubscriber(Subscriber subscriber);
void canCustomerSubscribe(@Param("msisdn") String msisdn,
@Param("responseCode") Integer responseCode);
}
canCustomerSubscribe에 대한 mybatis xml 콘텐츠 :
<parameterMap id="canCustomerSubscribeParams" type="map">
<parameter property="msisdn" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="responseCode" jdbcType="NUMERIC" javaType="java.lang.Integer" mode="OUT"/>
</parameterMap>
<select id="canCustomerSubscribe" parameterMap="canCustomerSubscribeParams" statementType="CALLABLE">
CALL wallet.pkg_wallet_validation.can_customer_subscribe(#{msisdn}, #{responseCode})
</select>
그리고 실행할 코드 :
public void subscribe(String msisdn) throws InvalidArgumentException {
Integer responseCode = 0;
subscriberMapper.canCustomerSubscribe(msisdn, responseCode);
System.out.println("msisdn: " + msisdn + ", responseCode: " + responseCode);
}
유효하지 않은 "msisdn"방식으로 "subscribe"메소드를 실행할 때 프로 시저에서 실제 값을받지 못합니다. 데이터베이스에서이 프로 시저를 실행하면 reponseValue = 1001이 리턴되지만 Java 코드에서 0을 수신합니다. mybatis에 대해 stout으로 디버그 로깅을 설정하고 출력은 다음과 같습니다.
2011-10-19 10:32:46,732 DEBUG [main] (Slf4jImpl.java:28) ooo Connection Opened 2011-10-19 10:32:46,909 DEBUG [main] (Slf4jImpl.java:28) ==> Executing: CALL wallet.pkg_wallet_validation.can_customer_subscribe(?, ?) 2011-10-19 10:32:46,911 DEBUG [main] (Slf4jImpl.java:28) ==> Parameters: 509999999(String), 0(Integer) msisdn: 509999999, responseCode: 0
"subscribe"메소드 responseCode = null로 변경하면 수신 및 오류가 발생합니다.
org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: java.sql.SQLException: Invalid column type ; uncategorized SQLException for SQL []; SQL state [null]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type
해결법
-
==============================
1.솔루션을 찾았습니다. 지도는 canCustomerSubscribe 메소드에서 두 개의 매개 변수 대신 사용자 여야합니다.
솔루션을 찾았습니다. 지도는 canCustomerSubscribe 메소드에서 두 개의 매개 변수 대신 사용자 여야합니다.
void canCustomerSubscribe(Map<String,Object> params);
mybatis XML 내용 :
<select id="canCustomerSubscribe" parameterType="java.util.HashMap" statementType="CALLABLE"> CALL wallet.pkg_wallet_validation.can_customer_subscribe( #{msisdn, jdbcType=VARCHAR, javaType=java.lang.String, mode=IN}, #{responseCode,jdbcType=NUMERIC, javaType=java.lang.Integer, mode=OUT}) </select>
(인수 속성 사이에 쉼표를 추가해야합니다)
구독 서비스 메서드에서 호출 :
public void subscribe(String msisdn) throws InvalidArgumentException { Map<String, Object> params = new HashMap<String, Object>(); params.put("msisdn", msisdn); params.put("responseCode", null); subscriberMapper.canCustomerSubscribe(params); System.out.println(params.get("responseCode")); }
from https://stackoverflow.com/questions/7817185/cannot-receive-out-parameter-from-oracle-procedure-executed-by-mybatis by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 통합 - 외부 쿼리 JDBC 쿼리 (0) | 2019.02.25 |
---|---|
[SPRING] MongoDB $ 배열 2 레벨 당김 (0) | 2019.02.25 |
[SPRING] Hibernate pojo에서 @lob을위한 적절한 하이버 네이트 매핑. 우리는 최대 절전 모드 매핑을 사용하고 있습니다. 당신은 제게 @lob annotation을 말해 줄 수 있습니까? (0) | 2019.02.25 |
[SPRING] Spring Security OAuth2와 리소스 서버가 필요합니까? (0) | 2019.02.25 |
[SPRING] bean 클래스의 속성 값은 생성자에서 null입니다. (0) | 2019.02.25 |