我创建了一些结果图以在某些查询中重用。映射适用于一个查询,而另一个查询失败。 我在网上搜索了关于如何在resultsMaps中使用集合并阅读一些文章,但我仍然没有找到我做错的事。
有人可以帮我吗?
地图制作者是:
<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);
我得到的错误是:
GRAVE:servlet [Spring MVC Dispatcher Servlet]的Servlet.service()与路径[/ newsave]的上下文 抛出异常[请求处理失败;嵌套异常是org.mybatis.spring.MyBatisSystemException: 嵌套异常是org.apache.ibatis.reflection.ReflectionException:无法设置属性&mercadoriaFilialLocaisEstoque&#39; &#39;类atacadao.model.negocio.SetorBalanco&#39; 有价值的&#39; atacadao.model.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 :(得分:0)
因为DESCRICAO_SETOR_BALANCO
,RECNUM_MEFILIAL
(以及LocalEstoqueMap
中的列,MercadoriaFilialMap
resultMaps)列中没有值,所以结果来自findMercadoriaFilialLocalEstoque。