在插入时返回主键不起作用myBatis-Spring

时间:2015-10-14 10:44:47

标签: postgresql mybatis spring-mybatis

我有以下表格和序列

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

谁能告诉我原因并给我解决方案? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

经过大量搜索后,与此link中给出的可能适用于旧版本或iBatis的解决方案不同(但这不适用于最新版本),我发现myBatis 3.xx只是做了不支持在插入时返回自动生成id / key。相反,它返回更新的数字行,因此在我的情况下它返回1.您可以阅读有关此link的更多内容。