如何解决使用ibatis检索新插入的行的ID时的并发问题
这绝对是错误的。用:
select currval('sometable_id_seq')
或更好:
INSERT INTO sometable ( somefield ) VALUES ( #value# ) returning id
这将返回您插入的ID。
解决方法
我正在使用iBatis / Java和Postgres 8.3。当我在ibatis中插入时,我需要返回ID。
我使用下表描述我的问题:通过运行create语句自动生成
CREATE TABLE sometable ( id serial NOT NULL,somefield VARCHAR(10) );
Sequence sometable_id_seq
。
目前,我使用以下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。
我怀疑这是否可以与许多并发插入一起使用。
这会引起问题吗?像返回错误插入的ID?