2014-10-20 3 views
0

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

<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 вместе с именем и описанием, а затем вставить в DB. Таким образом, в этом случае элемент вставки не нуждается в атрибуте selectKey. id, имя и Описание значения находятся в объекте. Когда я обновил запрос, как показано ниже, он метает Исключение нулевого указателя.

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

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

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

Все указатели приветствуются,

Спасибо, SD

ответ

0

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