我正在使用iBatis/Java和Postgres8.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>

这似乎是ibatis检索新插入的id的方法。ibatis首先运行一个INSERT语句,然后要求序列提供最后一个id。
我怀疑这是否适用于许多并发插入。
这会引起问题吗?比如返回错误插入的id?
(另请参见我关于how to get ibatis to use the INSERT .. RETURING .. statements的相关问题)

最佳答案

这绝对是错的。使用:

select currval('sometable_id_seq')

或者更好:
INSERT INTO sometable ( somefield ) VALUES ( #value# ) returning id

它将返回您插入的id。

07-28 02:33
查看更多