2015-04-17 102 views
2

我创建了一些结果图以便在某些查询中重用。对于一个查询,映射工作正常,另一个查询失败。 我在网上搜索了关于如何使用collections in resultMaps并阅读一些文章,但我仍然无法找到我做错了什么。填充集合时出现Mybatis错误

任何人都可以帮助我吗?

的映射是:

<resultMap id="SetorBalancoMap" type="atacadao.model.negocio.SetorBalanco"> 
    <id property="codigo" column="CODIGO_SETOR_BALANCO" /> 
    <result property="descricao" column="DESCRICAO_SETOR_BALANCO" /> 
    <collection property="mercadoriaFilialLocaisEstoque" javaType="ArrayList" ofType="atacadao.model.negocio.MercadoriaFilialLocalEstoque" resultMap="atacadao.mapeamento.negocio.MercadoriaFilialLocalEstoqueMapper.MercadoriaFilialLocalEstoqueMap"/> 
</resultMap> 

<resultMap id="MercadoriaFilialLocalEstoqueMap" type="atacadao.model.negocio.MercadoriaFilialLocalEstoque"> 
    <id property="idMercadoriaFilial" column="RECNUM_MEFILIAL" /> 
    <id property="idLocalEstoque" column="CODIGO_LOCAL_ESTOQUE" /> 
    <id property="idSetorBalanco" column="CODIGO_SETOR_BALANCO" /> 
    <result property="quantidade" column="ESTOQUE_LOC" /> 
    <association property="mercadoriaFilial" resultMap="atacadao.mapeamento.negocio.MercadoriaFilialMapper.MercadoriaFilialMap" /> 
    <association property="localEstoque" resultMap="atacadao.mapeamento.negocio.LocalEstoqueMapper.LocalEstoqueMap" /> 
    <association property="setorBalanco" resultMap="atacadao.mapeamento.negocio.SetorBalancoMapper.SetorBalancoMap" /> 
</resultMap> 

@Select("SELECT M.FILIAL, F.NOME_FILIAL, " 
    + " M.RECNUM AS RECNUM_MEFILIAL, " 
    + " L.SETOR_BALANCO AS CODIGO_SETOR_BALANCO, S.DESCRICAO AS DESCRICAO_SETOR_BALANCO, " 
    + " M.MERCADORIA AS MERCADORIA, " 
    + " C.RECNUM as RECNUM_MECUSTO, " 
    + " NVL(C.CUSTO_ATU, 0) AS CUSTO_ATU, NVL(B.INDICE_CUSTO, 0) AS INDICE_CUSTO, " 
    + " NVL(L.ESTOQUE_LOC, 0) AS ESTOQUE_LOC, E.CODIGO, E.MULTIPLICADOR_1, E.MULTIPLICADOR_2, " 
    + " L.LOCAL AS CODIGO_LOCAL_ESTOQUE " 
    + " FROM SAVE.MEFILIAL M " 
    + " INNER JOIN SAVE.FILIAL F ON (M.FILIAL = F.CODIGO) " 
    + " INNER JOIN SAVE.MELOCAL L ON (M.FILIAL = L.FILIAL AND M.MERCADORIA = L.MERCADORIA AND F.ESTOQUE_BASE = L.LOCAL) " 
    + " INNER JOIN SAVE.MEEMBALA E ON (M.MERCADORIA = E.MERCADORIA AND E.CODIGO = 1) " 
    + " LEFT JOIN SAVE.SETOR_BALANCO S ON (L.SETOR_BALANCO = S.CODIGO) " 
    + " INNER JOIN SAVE.MEBASICO B ON (M.MERCADORIA = B.MERCADORIA) " 
    + " INNER JOIN SAVE.MECUSTO C ON (F.REGIAO = C.REGIAO AND C.MERCADORIA = DECODE(B.GRUPO_CUSTO, 0, B.MERCADORIA, B.GRUPO_CUSTO) " 
    + "   AND C.MG = (DECODE(B.GRUPO_CUSTO, 0, 'M', 'G'))) " 
    + " WHERE M.FILIAL = #{codigoFilial} " 
    + " AND L.SETOR_BALANCO in " 
    +"      (SELECT TOPN1.SETOR_BALANCO FROM (SELECT /*+ FIRST_ROWS(n) */ topn.*, ROWNUM rnum FROM (" 
    +"       select distinct MEL.SETOR_BALANCO from SAVE.MELOCAL MEL " 
    +"       WHERE MEL.FILIAL = #{codigoFilial} " 
    +"       AND #{codigoSetor,jdbcType=INTEGER} IS NULL OR (#{codigoSetor,jdbcType=INTEGER} IS NOT NULL AND MEL.SETOR_BALANCO = #{codigoSetor,jdbcType=INTEGER}) " 
    +"       order by MEL.SETOR_BALANCO " 
    + "      ) TOPN " 
    + "       WHERE ROWNUM <= #{rows}* (#{page} -1)+ #{rows} " 
    + "     ) TOPN1 where rnum > #{rows} * (#{page} -1)) " 
    + " order by L.SETOR_BALANCO ") 
@ResultMap("SetorBalancoMap") 
@Options(useCache=false) 
List<SetorBalanco> findSetoresBalancoByFilialESetor(@Param("codigoFilial") Integer codigoFilial, @Param("codigoSetor") Integer codigoSetor, 
     @Param("rows") Integer linhas, @Param("page") Integer pagina); 

和发生故障的一个是:

@Select ("SELECT M.FILIAL as FILIAL, F.NOME_FILIAL, " 
     +" L.SETOR_BALANCO AS CODIGO_SETOR_BALANCO, " 
     +" M.MERCADORIA AS MERCADORIA, " 
     +" NVL(B.INDICE_CUSTO, 0) AS INDICE_CUSTO, " 
     +" NVL(L.ESTOQUE_LOC, 0) AS ESTOQUE_LOC, " 
     +" L.LOCAL AS CODIGO_LOCAL_ESTOQUE " 
     +" FROM SAVE.MEFILIAL M " 
     +" INNER JOIN SAVE.FILIAL F " 
     +" ON (M.FILIAL = F.CODIGO) " 
     +" INNER JOIN SAVE.MELOCAL L " 
     +" ON (M.FILIAL = L.FILIAL AND M.MERCADORIA = L.MERCADORIA AND " 
     +" F.ESTOQUE_BASE = L.LOCAL) " 
     +" INNER JOIN SAVE.MEBASICO B " 
     +" ON (M.MERCADORIA = B.MERCADORIA) " 
     +" WHERE M.FILIAL = #{codigoFilial} " 
     +" AND M.MERCADORIA = #{codigoMercadoria}") 
@ResultMap("MercadoriaFilialLocalEstoqueMap") 
@Options(useCache=false) 
List<MercadoriaFilialLocalEstoque> findMercadoriaFilialLocalEstoque(@Param("codigoFilial") Integer codigoFilial, @Param("codigoMercadoria") Integer codigoMercadoria); 

我得到的错误是:

坟墓Servlet.service()进行的servlet [Spring MVC的调度的Servlet在与路径的上下文[/ newsave] 引发异常[请求处理失败;嵌套的例外是org.mybatis.spring.MyBatisSystemException: 嵌套的例外是org.apache.ibatis.reflection.ReflectionException:“类atacadao.model.negocio.SetorBalanco” 与价值“atacadao.model的无法设置属性“mercadoriaFilialLocaisEstoque” .negocio.MercadoriaFilialLocalEstoque @ 19b90' 原因:java.lang.IllegalArgumentException异常:参数类型不匹配]与根源 java.lang.IllegalArgumentException异常:参数类型不匹配

域名类是:

public class SetorBalanco { 
    private String codigo; 
    private String descricao; 
    private List<MercadoriaFilialLocalEstoque> mercadoriaFilialLocaisEstoque = new ArrayList(); 
    ... 
} 

public class MercadoriaFilialLocalEstoque { 
    private Integer idMercadoriaFilial; 
    private Integer idLocalEstoque; 
    private Integer idSetorBalanco; 

    private MercadoriaFilial mercadoriaFilial; 
    private LocalEstoque localEstoque; 
    private SetorBalanco setorBalanco; 
    ... 
} 

回答

0

,因为没有值DESCRICAO_SETOR_BALANCORECNUM_MEFILIAL(和,也许,从列LocalEstoqueMapMercadoriaFilialMap resultMaps)列在结果从findMercadoriaFilialLocalEstoque了。