iBatis генерирует только 6 параметров (все ноль), в другое время генерирует 9 параметров - PullRequest
1 голос
/ 24 августа 2011


У меня есть хороший оператор вставки, который имеет 9 параметров, но по какой-то причине iBatis генерирует только 6 для конкретного объекта. Для всех остальных он генерирует 9, как и должно быть.
Может ли быть так, что все параметры NULL?

?,?,?,?,?, Нулевой?, NULL, NULL, NULL, NULL, NULL,?,?,?, NULL, NULL

OK:

Параметры: [[B @ 132b63e, [B @ 5ac911, [B @ 468066, xxxxxxxxxxxxxxxx, ноль, ноль, 0, 0, 0]

NOK:

Параметры: [ноль, ноль, ноль, ноль, ноль, ноль]

И ошибка, как вы и ожидали:

Отсутствуют параметры IN или OUT в индексе 7

INSERT 17 COLUMNS INTO SOME_TABLE VALUES (
        #id#,
        #someObj.id#,
        #someOtherObj.id#,
        #aProperty#,
        #anotherProperty#,
        null,
        #yetAnotherProperty#,
        null,
        null,
        null,
        null,
        null,
        #prop1#,
        #prop2#,
        #prop3#,
        null,
        null)

someObj и someOtherObj имеют значение NULL. Также мое приложение использует cglib для отложенной загрузки, поэтому могут присутствовать некоторые улучшения, не знаю, влияет ли это на что-то.

1 Ответ

1 голос
/ 24 августа 2011

Вы можете сделать это:

INSERT 17 COLUMNS INTO SOME_TABLE VALUES (
        #id#,
        <isNotNull property="someObj">
            #someObj.id#,
        </isNotNull>
        <isNull property="someObj">
            NULL,
        </isNull>
        <isNotNull property="someOtherObj">
            #someOtherObj.id#,
        </isNotNull>
        <isNull property="someObj">
            NULL,
        </isNull>
        #aProperty#,
        #anotherProperty#,
        null,
        #yetAnotherProperty#,
        null,
        null,
        null,
        null,
        null,
        #prop1#,
        #prop2#,
        #prop3#,
        null,
        null)
...