MyBatis Problème avec la Condition <foreach avec Liste à l'intérieur d'une Carte

Je dois construire une EN condition à l'aide de MyBatis où ont pour passer d'une liste de PARENT_VALUES être obtenue sur la base de la boucle foreach ci-dessous....

J'ai essayé, mais impossible de résoudre ce problème. Je ne suis pas sûr si

Valeurs Transmises sont:

Map input = new HashMap();
input.put("somedata");
List<String> inConditionList = new ArrayList<String>();
inConditionList.add("P1");
inConditionList.add("P2");
input.put(inConditionList);
sqlSessionTemplate.selectList("getNameAgeDetails", input);

SQL nécessaires:

 SELECT P.NAME, P.AGE
   FROM PERSON_DETAILS P
   WHERE SOMECOLUMN is NULL AND DATA IN
   (SELECT DATA FROM PARENT_TABLE WHERE PARENT_VALUE IN ("P1, "P2"))
 ORDER BY P.NAME
  FETCH FIRST 10 ROW ONLY

MyBatis Mappeur SQL:

<select id="getNameAgeDetails" parameterType="map" resultMap="someResultMap">
    <![CDATA[
        SELECT P.NAME, P.AGE
        FROM PERSON_DETAILS P
        WHERE
         SOMECOLUMN is NULL
        AND DATA IN
          (SELECT DATA
          FROM PARENT_TABLE
          WHERE PARENT_VALUE IN 
         <FOREACH item="item"  index="index" collection="list" separator="," open="(" close=")"> 
                ${item}
            </FOREACH>  
          )
          ORDER BY P.NAME
          FETCH 
            FIRST 10 ROW ONLY 
    ]]>
  </select>

Ci-dessous est l'Erreur que j'obtiens quand j'essaie de lancer mon Unité de cas de tests:

### The error occurred while setting parameters
### SQL: SELECT P.NAME, P.AGE
            FROM PERSON_DETAILS P
            WHERE
             SOMECOLUMN is NULL
            AND DATA IN
              (SELECT DATA
              FROM PARENT_TABLE
              WHERE PARENT_VALUE IN <FOREACH item="item"  index="index" collection="list" separator="," open="(" close=")">                      ?              </FOREACH>             
### Cause: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=PARENT_VALUE IN 
            <foreach it;TION
          WHERE;<space>, DRIVER=3.63.75
; bad SQL grammar []; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=PARENT_VALUE IN 
  • Note: je ne suis pas à l'aide de déclarations préparées à l'avance dans le ci-dessus #{item} a été l'un des essais que j'ai essayé, mais je vois toujours des échecs.
  • stackoverflow.com/questions/18388936/..., vous pouvez cocher cette question
  • J'ai regardé le lien ci-dessus plus tôt, mon cas est différent de ce qui a été posté il y a...
  • Est foreach arriver substitué? Je suppose que depuis que vous êtes à l'application CDATA pour l'ensemble de la déclaration, <foreach est ignorée et l'intégralité de la déclaration est utilisé pour la requête.
  • C'est correct foreach n'est pas prise en subtituted..je ne suis pas sûr de la façon de les corriger..
  • Juste supprimer la balise CDATA requis lorsque vous êtes à l'aide de balises xml comme <, >, etc

InformationsquelleAutor Shiv Gopal | 2014-01-27