У меня есть следующая таблица и последовательностьВозврат первичного ключа при вставке не работает 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 независимо от того, сколько раз я называю
Может кто-нибудь сказать мне причину, почему и дать мне решение? Спасибо заранее.
Код вставки внутри 'insertTeacher' –
@ wingᴇdpᴀnᴛʜᴇʀ Внутри insertTeacher нет кода. Я использую инфраструктуру myBatis-Spring, где нам просто нужно объявить функцию вместе с sql, как указано выше в интерфейсе (Mapper). –