iBatis/Java と Postgres 8.3 を使用しています。Ibatis で挿入を行うときは、ID を返す必要があります。
次の表を使用して質問を説明します
CREATE TABLE sometable ( id serial NOT NULL, somefield VARCHAR(10) );
。シーケンスsometable_id_seq
は、create ステートメントを実行することによって自動生成されます。
現時点では、次のSQLマップを使用しています:
<insert id="insertValue" parameterClass="string" >
INSERT INTO sometable ( somefield ) VALUES ( #value# );
<selectKey keyProperty="id" resultClass="int">
SELECT last_value AS id FROM sometable_id_seq
</selectKey>
</insert>
これは、新しく挿入された ID を取得する ibatis の方法のようです。Ibatis は最初に INSERT ステートメントを実行し、その後シーケンスに最後の ID を要求します。
これが多くの同時挿入で機能するかどうかは疑問です。(この質問で説明)
ibatis で次のステートメントを使用したいと思います。
INSERT INTO sometable ( somefield ) VALUES ( #value# ) RETURNING id;
しかし、sqlMap内で使用しようとすると、<insert>
ibatisはIDを返しません。<selectKey>
タグが必要なようです。
だからここに質問があります:
上記のステートメントを ibatis で使用するにはどうすればよいですか?