MyBatis - java .lang.IllegalArgumentException: коллекция сопоставленных выражений уже содержит значение - PullRequest
0 голосов
/ 26 марта 2020

Я использую Spring и MyBatis для своего приложения. У меня не было никаких исключений, пока я не изменил пакет на класс, который я использую как ResultType. С тех пор я получаю следующую ошибку при запуске приложения:

Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for app2Check.core.dao.ThemeSentimentDAO.getSplitMatchingThemes
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:782)
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:754)
at org.apache.ibatis.session.Configuration.addMappedStatement(Configuration.java:578)
at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:288)
at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:107)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:135)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildStatementFromContext(XMLMapperBuilder.java:128)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118)
... 67 more

Вот мой xml маппер (я должен был подвергать цензуре запросы, но они не были изменены):

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="app2Check.core.dao.ThemeSentimentDAO">
<select id="getSplitMatchingThemes" resultType="xyz.objects.sentences.SplitSent"><!-- Previously resultType="xyz.sentences.SplitSent" -->
    SELECT TOP (#{numSplitPerPage})
        ...
        <if  test = "redo == false">
            ...
        </if>
    WHERE (
            <foreach collection="themes" item="t" index="index" separator=" OR ">
                (
                    ..
                )
            </foreach>
        )

</select>

<select id="getThemes" resultType="xyz.objects.Theme">
...
</select>

<select id="countSplitMatchingTheme"  resultType="xyz.utils.SplitCount">
    ...
</select>

</mapper>

Это мой интерфейс картографа:

public interface ThemeSentimentDAO {

    public List<Theme> getThemes(@Param("appId") String appId);

    public List<SplitFeedback> getSplitMatchingThemes(
            @Param("appId") String appId, 
            @Param("customerCare") String customerCare,
            @Param("redo") boolean redo,
            @Param("analysisDate") Timestamp analysisDate,
            @Param("themes") List<Theme> themes,
            @Param("numSplitPerPage") int numSplitPerPage
            );

    public SplitCount countSplitMatchingTheme(
            @Param("appId") String appId, 
            @Param("customerCare") String customerCare,
            @Param("redo") boolean redo,
            @Param("themes") List<Theme> themes
            );
    }
...