mybatis spring batch +sybase: пытается получить значение идентификатора базы данных после вставки, чтобы присвоить его полю id в pojo
Мой код выглядит как пример кода, приведенный ниже.
--table создать заявление
CREATE TABLE LOG
(
uniqueID NUMERIC(20,0) IDENTITY,
NAME VARCHAR(20) NOT NULL,
DESCRIPTION VARCHAR(200) NOT NULL,
USR VARCHAR(20) NOT NULL
)
--похо класс
public class Log
{
private long identifier;
private String name;
private String description;
private String user;
//getters+setters......
}
--insert заявление в маппере
<insert id="insertRecord" parameterType="com.xxx.yyy.zzz.model.Log" useGeneratedKeys="true" keyProperty="identifier" keyColumn="uniqueID">
INSERT INTO LOG (NAME, DESCRIPTION, USR)
VALUES (#{log.name}, #{log.description}, #{log.user})
</insert>
проблема: когда я пытаюсь запустить этот код для базы данных sybase, я получаю исключение NullPointerException. Когда я попытался отладить его, ошибка пришла изнутри SybStatement.class. Извините, я не могу предоставить более полную трассировку стека из-за ограничений в копировании / вставке на моей рабочей станции.
Я могу запустить тот же код для базы данных H2 успешно. Записи вставлены, и "идентификатор" в объекте "Лог" имеет значение идентификатора, совпадающее со строками базы данных.
Вы сталкивались с этой проблемой в sybase? Пожалуйста, поделитесь, если у кого-то есть код для демонстрации использования mybatis функции "useGeneratedKeys" в sybase.
Примечание. Я выполняю этот оператор вставки, используя MybatisBatchItemWriter. Я попытался использовать два разных объекта sqlsessiontemplate для чтения и записи чанков, но это не помогло. Я использую jconn3 sybase jdbc jar, mybatis 3.4.4 и mybatis-spring 1.3.1 jar.
заранее спасибо
1 ответ
В терминах SQL вам нужно выполнить SELECT @@IDENTITY, чтобы получить сгенерированное значение. Вопрос в том, генерирует ли ваш фреймворк такой SQL...