我正在使用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。