Оператор вставки iBatis, бросающий NPE

Я новичок в iBatis. В моем проекте мы используем iBatis для сохранения объектов Java в Oracle DB. У меня есть класс ClassA, который имеет 3 столбца: идентификатор, имя и описание. Данные будут сохранены в таблице A. В БД есть последовательность для генерации значения для столбца id в этой таблице. Мы написали оператор вставки в эту таблицу следующим образом:

<insert id="insertTableA" parameterClass="com.ClassA">
    <selectKey resultClass="java.lang.Long" keyProperty="id">
       SELECT seq_TableA.nextval as id FROM dual
    </selectKey>
    INSERT INTO TableA(ID, NAME, DESCRIPTION) VALUES (#id#, #name#, #description#)
</insert>

Это сработало нормально.

Но из-за ограничений нашего собственного фреймворка пользовательского интерфейса нам пришлось изменить дизайн. Поэтому нам нужно сначала сгенерировать длинный идентификатор из последовательности, установить это значение в экземпляре ClassA вместе с именем и описанием, а затем вставить в БД. Таким образом, в этом случае статус вставки не нуждается в атрибуте selectKey. Значения id, name и description находятся в объекте. Когда я обновил запрос, как показано ниже, он выдает Исключение нулевого указателя.

<insert id="insertTableA" parameterClass="com.ClassA">
    INSERT INTO TableA(ID, NAME, DESCRIPTION) VALUES (#id#, #name#, #description#)
</insert>

Как мы можем вставить данные в таблицу без использования файла . Сначала я генерирую ключ из последовательности, заполняю объект всеми значениями, включая идентификатор, и пытаюсь вызвать оператор из Java следующим образом:

getSqlTemplate().insert("process.insertTableA", instanceClassA);

Любые указатели приветствуются,

Спасибо, СД


person user184794    schedule 20.10.2014    source источник


Ответы (1)


На всякий случай, включили ли вы метод getId() в свой класс ClassA, чтобы он возвращал значение поля id?

person Brian Showalter    schedule 23.10.2014