我创建了一些结果图以便在某些查询中重用。对于一个查询,映射工作正常,另一个查询失败。 我在网上搜索了关于如何使用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;
...
}