У меня есть следующая таблица и последовательность
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 независимо от того, сколько раз я звоню
Может ли кто-нибудь сказать мне причину и дать мне решение? Заранее спасибо.
insertTeacher
- person Vivek S.   schedule 14.10.2015