2015-10-14 3 views
0

У меня есть следующая таблица и последовательностьВозврат первичного ключа при вставке не работает myBatis-Spring

CREATE TABLE teacher 
(
    teacher_id serial NOT NULL, 
    teacher_name character varying(50), 
    CONSTRAINT teacher_pkey PRIMARY KEY (teacher_id) 
) 


CREATE SEQUENCE teacher_teacher_id_seq 
    INCREMENT 1 
    MINVALUE 1 
    MAXVALUE 9223372036854775807 
    START 1 
    CACHE 1; 

и хотите получить первичный ключ всякий раз, когда я вставить новую запись. Когда я запускаю следующий запрос, он работает и возвращает первичный ключ, который я хочу.

INSERT INTO teacher(teacher_name) VALUES ('John') RETURNING teacher_id; 

Но когда я использую myBatis-Spring Mapper следующим

@Insert("INSERT INTO teacher(teacher_name) " + 
     "VALUES (#{teacherName}) RETURNING teacher_id") 
public int insertTeacher(Teacher teacher);  

и вызвать функцию с корректными teacher объекта, он вставляется значение, но возвращает -1.

И я также попробовал следующую процедуру

@Insert("INSERT INTO teacher(teacher_id, teacher_name) " + 
      "VALUES (#{teacherId}, #{teacherName})") 
@SelectKey(statement="SELECT nextval('teacher_teacher_id_seq');", keyProperty="teacherId", before=true, resultType=int.class) 
public int insertTeacher(Teacher teacher); 

это возвращение 1 независимо от того, сколько раз я называю

Может кто-нибудь сказать мне причину, почему и дать мне решение? Спасибо заранее.

+0

Код вставки внутри 'insertTeacher' –

+0

@ wingᴇdpᴀnᴛʜᴇʀ Внутри insertTeacher нет кода. Я использую инфраструктуру myBatis-Spring, где нам просто нужно объявить функцию вместе с sql, как указано выше в интерфейсе (Mapper). –

ответ

0

После многократного поиска, в отличие от решения, приведенного в этом документе link, которое может работать для более старых версий или iBatis (но это не работает с последней версией), я узнал, что myBatis 3.xx просто не поддерживает возврат auto генерировать id/key на вставке. Вместо этого он возвращает обновленную строку чисел, поэтому в моем случае она возвращает 1. Вы можете прочитать больше на этом link.

Смежные вопросы