2014-12-19 2 views
1

부울 값을 Mybatis와 매핑하려고했지만 문제가 있습니다.MyBatis가 부울 매핑과 작동하지 않습니다.

XML File: 

<resultMap id="destinationTypeMap" type="DestinationTypeDTO"> 
     <result property="destinationTypeId" column="education_destination_type_id" javaType="java.lang.Long" jdbcType="NUMERIC"/> 
     <result property="description" column="description" javaType="java.lang.String" jdbcType="VARCHAR"/> 
     <result property="available" column="is_available" javaType="boolean" jdbcType="VARCHAR" typeHandler="BooleanHandler"/> 
    </resultMap> 

자바 클래스 :

public class DestinationTypeDTO { 

    private long destinationTypeId; 
    private String description; 
    private boolean available; 

    public long getDestinationTypeId() { 
     return destinationTypeId; 
    } 

    public void setDestinationTypeId(long destinationTypeId) { 
     this.destinationTypeId = destinationTypeId; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public boolean isAvailable() { 
     return available; 
    } 

    public void setAvailable(boolean available) { 
     this.available = available; 
    } 

} 

그러나, 나는이 오류 로그를 얻고있다 :

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Could not set property 'isAvailable' of '[email protected]' with value 'true' Cause: org.apache.ibatis.reflection.ReflectionException: There is no setter for property named 'isAvailable' in 'class ....DestinationTypeDTO' 

내가 찾으려고 시간을 보냈다 첫째, 난 당신과 관련된 부분을 보여주지 무슨 일이 일어나고 있지만 성공하지 못했습니다. 어떤 힌트?

모두에게 감사드립니다.

답변

4

변경 java.lang.BooleanjavaType="boolean"

public void setIsAvailable(Boolean available) { 
    this.available = available; 
} 

public Boolean getIsAvailable() { 
    return available; 
} 
+0

힌트를 보내 주셔서 감사합니다. 다른 제안? –

+0

infact 부울은 자바가 primitve 유형 – kuriouscoder

+0

으로 취급 할 때 작동합니다. 작동하지 않습니다. 속성이 이미 "사용 가능"했음을 확인하십시오. –

2
이 세터를 변경

게터/세터를 private Boolean isAvailable;에 클래스 변경 private boolean available;에서 property="available"

<result property="available" column="is_available" property="available" javaType="java.lang.Boolean" jdbcType="VARCHAR" typeHandler="BooleanHandler"/> 

을 지정하고 추가는 iBATIS는 POJO의 표준 형식과 부울 이름을 기대 -

public void setIsAvailable(boolean available) { 
    this.available = available; 
} 
+0

나는 그랬지만 여전히 일하지 않았다. 나는 여전히 이것을 얻고있다 : org.mybatis.spring.MyBatisSystemException : 중첩 예외는 org.apache.ibatis.reflection.ReflectionException : 'uk.co.corelogic.mosaic.dto.education.DestinationTypeDTO @'의 'isAvailable'속성을 설정할 수 없다. bbd76bf '값이'true '인 원인 : org.apache.ibatis.reflection.ReflectionException :'class uk.co.corelogic.mosaic.dto.education.DestinationTypeDTO '에'isAvailable '이라는 속성에 대한 setter가 없습니다. –

0

데이터베이스 컬럼이 "is_available"라는 당신의 속성이 매핑이 작동하지 않는 이유는,이 두 가지 솔루션을 가지고 있다고 "가능합니다"라는 :

  1. 변경 컬럼의 이름을 "가능" 또는 속성의 이름을 "is_available"으로 변경하십시오 (Java에서는 ok가 아님)

  2. "사용 가능한 is_available"을 사용하십시오.