日期:2014-05-17  浏览次数:20668 次

ibatis java.sql.SQLException: 列名无效
这是我的配置文件

<sqlMap>
<typeAlias alias="erpSales" type="com.richfit.bi.imap.business.ErpSalesRelation"/>
<resultMap id="erpSaleRef" class="erpSales">  
  <result property="id" column="ID"/>  
  <result property="areaId" column="AREAID"/>
  <result property="typeId" column="TYPEID"/>  
  <result property="income" column="INCOME"/>
  <result property="typeName" column="ERP_SALES_TYPE.TYPENAME"/>
  <result property="areaName" column="ERP_SALES_AREA.AREANAME"/>  
  </resultMap>  
   
<!-- 获得销售对象-->
<select id="querySpecErpSales" parameterClass="string" resultMap="erpSaleRef" >
<![CDATA[
SELECT rel.Id,rel.AREAID,rel.TYPEID,rel.INCOME,type.TYPENAME,area.AREANAME 
FROM ERP_SALES_RELATION rel,ERP_SALES_TYPE type,ERP_SALES_AREA area 
WHERE area.AREANAME=#areaName# and area.AREAID=rel.AREAID and rel.TYPEID= type.TYPEID
]]>
</select>


</sqlMap>

这是我的ErpSalesRelation类
public class ErpSalesRelation
{
private int id;
private int typeId;
private int areaId;
private String typeName;
private String areaName;
private String income;

-----省略set/get方法

这是我的数据表
create table ERP_SALES_AREA
(
  AREAID NUMBER(20) not null,
  AREANAME VARCHAR2(14)
)

create table ERP_SALES_TYPE
(
  TYPEID NUMBER(20) not null,
  TYPENAME VARCHAR2(14)
)

create table ERP_SALES_RELATION
(
  ID NUMBER(20) not null,
  AREAID NUMBER(20) not null,
  TYPEID NUMBER(20) not null,
  INCOME VARCHAR2(20)
)

运行后报异常:
java.sql.SQLException: 列名无效

请高手指点到底拿错了.....!!!!

------解决方案--------------------
<result property="typeName" column="ERP_SALES_TYPE.TYPENAME"/>
<result property="areaName" column="ERP_SALES_AREA.AREANAME"/> 

去掉表名试下,我刚刚在DB2上,用表名加列名就会报错
------解决方案--------------------
估计是你<resultMap id="erpSaleRef" class="erpSales"> ,对应的是ErpSalesRelation类,而ErpSalesRelation类中的属性就直接是typeName、areaName,到时传值因在ErpSalesRelation类中有set\get,可以直接获值; 而非对象ERP_SALES_TYPE、ERP_SALES_AREA的属性,所以不需要加上具体的类名(对应的是表字段)

探讨
引用:

<result property="typeName" column="ERP_SALES_TYPE.TYPENAME"/>
<result property="areaName" column="ERP_SALES_AREA.AREANAME"/>

去掉表名试下,我刚刚在DB2上,用表名加列名就会报错


3ks zyz1985 ,可以……