Проблема ibatis с использованием <isNull>во время итерации по списку - PullRequest
0 голосов
/ 26 апреля 2010

Я новичок в iBatis и борюсь с элементами и.

Я хочу перебрать экземпляры List of Book, скажем, которые передаются как HashMap: MyParameters. Список будет называться listOfBooks.

Следовательно, предложение всего SQL-оператора будет выглядеть следующим образом:

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

Мне также нужно создать разные SQL в элементах итерации в зависимости от того, является ли свойство каждого экземпляра Book в списке listOfBooks нулевым или нет.

Итак, мне нужно что-то вроде этого:

 <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>

Когда я делаю это, я получаю сообщение об ошибке, в котором говорится, что в моем классе Book нет свойства READABLE с именем title. Однако каждый экземпляр Book содержит свойство title, так что я запутался! Я могу только предположить, что я управлял синтаксисом, пытаясь точно указать название конкретного экземпляра Book в listOfBooks. Я изо всех сил пытаюсь найти правильную технику для достижения этой цели. Если кто-нибудь может посоветовать путь вперед, я был бы благодарен.

Спасибо

1 Ответ

0 голосов
/ 26 апреля 2010

Полагаю

property="MyParameter.listOfBooks.title"

указывает Ibatis искать свойство title в объекте MyParameter.listOfBooks, который фактически является списком. Вы не хотите этого, вы хотите искать это свойство в каждом элементе списка (скажем, «курсор»).

В Ibatis, внутри тега <iterate>, синтаксис MyParameter.listOfBooks[] используется для ссылки на этот элемент вместо полного списка ( ref ), я не знаю, будет ли он работать внутри атрибут tag, вы можете попробовать: либо

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

или, может быть, даже

<isNull property="title">

Кстати, я не знаю, какую базу данных вы используете, но знаете ли вы о функции COALESCE ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...