2010-04-26 20 views
0

Je suis nouveau à iBatis et je suis aux prises avec les éléments et.problème d'ibatis en utilisant <isNull> tout en itérant sur une liste

Je souhaite effectuer une itération sur une liste d'instances de Book (par exemple) transmises en tant que HashMap: MyParameters. La liste s'appellera listOfBooks.

La clause de l'instruction générale de SQL ressemblera donc à ceci:

<iterate prepend="AND" property="MyParameters.listOfBooks" conjunction="AND" open="(" close=")"> 
... 
</iterate> 

Je dois aussi produire différents SQL dans les éléments Iterate selon si une propriété de chaque instance du livre dans la liste « listOfBooks » est nul ou non.

Alors, je besoin d'une chose déclaration comme ceci:

<iterate prepend="AND" property="MyParameters.listOfBooks" conjunction="AND" open="(" close=")"> 
     <isNull property="MyParameter.listOfBooks.title"> 
<!-- SQL clause #1 here --> 

     </isNull> 
    <isNotNull property="MyParameter.listOfBooks.title"> 
<!-- SQL clause #2 here --> 
</isNotNull> 

Quand je fais cela je reçois un message d'erreur indiquant qu'il n'y a pas de propriété « LISIBLE » nommé « title » dans mon livre classe. Cependant, chaque instance de livre contient une propriété title, donc je suis confus! Je peux seulement m'assurer que j'ai managé la syntaxe en essayant de localiser le titre de l'instance particulière de Book dans listOfBooks. J'ai du mal à trouver la bonne technique pour essayer d'y parvenir. Si quelqu'un peut conseiller une voie à suivre, je serais reconnaissant.

Merci

Répondre

0

je suppose

property="MyParameter.listOfBooks.title" 

pour rechercher Ibatis instruit une propriété title dans l'objet MyParameter.listOfBooks, qui est en fait une liste. Vous ne voulez pas cela, vous voulez rechercher cette propriété dans chaque élément de la liste (le 'curseur', disons).

En Ibatis, dans la balise <iterate>, la syntaxe MyParameter.listOfBooks[] est utilisée pour faire référence à cet élément au lieu de la liste complète (ref), je ne sais pas si cela va fonctionner dans un attribut de balise, vous pouvez essayer: soit

<isNull property="MyParameter.listOfBooks[].title"> 

ou peut-être même

<isNull property="title"> 

BTW, je ne sais pas le DB que vous utilisez, mais savez-vous de la fonction COALESCE?

+0

Merci pour les références: Je vais certainement les vérifier. J'avais essayé la syntaxe entre parenthèses car j'avais le sentiment moi-même que la syntaxe ciblait la mauvaise entité. Malheureusement, cela n'a pas fonctionné non plus. La base de données sous-jacente est Oracle 10g mais je n'étais pas au courant de la fonction COALESCE. Je vais regarder dans cela; Merci encore – onoma