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

Другие вопросы по тегам