【问题标题】:ibatis - How to map list of valueibatis - 如何映射值列表
【发布时间】:2017-04-06 15:06:58
【问题描述】:

我有一个 select 语句,它返回相同数据类型 (VARCHAR) 的值列表。结果介于 1 到 6 行之间。我正在使用 queryForList() 并将响应存储在 List 对象中。执行时出现错误

--- 原因:com.ibatis.sqlmap.client.SqlMapException:找不到将属性“statusList”映射到“null”列的类型处理程序。 一种或两种类型,或类型的组合不是 支持。

SQL 查询在 SQL 窗口中执行时返回 3 行。你能帮忙吗?提前致谢

<resultMap id="retrieveStatusResult"
    class="ie.org.model.ResponseBO">
    <result property="statusList" columnIndex="1" />
</resultMap>

<select id="retrieveStatus" parameterClass="ie.org.model.RequestBO"
    resultMap="retrieveStatusResult">
    SELECT (SELECT DESCRIPTION 
    FROM TABLEA LCD 
    WHERE LCD.CODE_DETAIL = QPL.STATUS)
    FROM  TABLEB QPL 
    WHERE QPL.QUOTE=#Quote#
    AND VERSION IN (SELECT VERSION FROM TABLEB WHERE QUOTE = #Quote#)       
</select>

ResponseBO.java

private List statusList = new ArrayList();

public List getStatusList() {
    return statusList;
}

public void setStatusList(List statusList) {
    this.statusList = statusList;
}

【问题讨论】:

    标签: java sql ibatis


    【解决方案1】:

    您没有正确映射结果/您的 bo 是错误的。

    当您使用queryForList() 时,您正在尝试创建您在 resultMap 中拥有的对象的列表。在您的 BO 中,您正尝试从查询答案的每一行创建一个列表。

    你应该使用这样的 BO:

    private String status;
    
    public String getStatus() {
        return status;
    }
    
    public void setStatus(String status) {
        this.status = status;
    }
    

    它有适合您查询答案的类型。

    要使用查询结果,您可以像这样调用语句:

    List<ResponseBO> listStatus = new ArrayList<ResponseBO>();
    
    listStatus = (List<ResponseBO>)queryForList("retrieveStatus",properys);
    

    propertys 是带有查询参数的哈希图

    【讨论】:

    • 非常感谢 axelzaro
    猜你喜欢
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 2010-09-12
    • 2021-09-21
    • 2011-02-10
    • 2017-10-16
    相关资源
    最近更新 更多