0

次のテーブルとシーケンスがあります

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 を返します

どなたか理由と解決策を教えていただけないでしょうか?前もって感謝します。

4

1 に答える 1

0

多くの検索を行った後、古いバージョンまたは iBatis で機能する可能性があるこのリンクで提供されているソリューションとは異なり (ただし、これは最新バージョンでは機能しません)、myBatis 3.xx は単に自動生成 ID/ を返すことをサポートしていないことがわかりました。キーオンインサート。代わりに、更新された番号行を返すため、私の場合は 1 を返します。このリンクで詳細を読むことができます。

于 2015-10-19T08:07:04.170 に答える