Java mybatis-插入事务
用于插入的mybatis映射器代码:Java mybatis-插入事务,java,sql,mybatis,Java,Sql,Mybatis,用于插入的mybatis映射器代码: <insert id="insert" parameterType="Shop" useGeneratedKeys="true"> insert into shop(email, pswd, nickname, mobile, city, create_date, status) values (#{email}, #{pswd}, #{nickname}, #{mobile}, #{city}, #{createDate}, #{sta
<insert id="insert" parameterType="Shop" useGeneratedKeys="true">
insert into shop(email, pswd, nickname, mobile, city, create_date, status) values (#{email}, #{pswd}, #{nickname}, #{mobile}, #{city}, #{createDate}, #{status})
<selectKey keyProperty="id" order="AFTER" resultType="long">
select currval('shop_id_seq')
</selectKey>
</insert>
数据库是postgresql 9.3
我的疑问是:如果没有明确的事务,当我使用select currval'shop_id_seq'从序列中检索id时,如果其他线程也在执行insert,是否可能获得错误的值
我认为不会,因为currval函数在当前会话的上下文中运行,而不是在全局会话的上下文中运行,但我不太确定。根据,序列函数currval:
返回nextval最近在当前会话中为此序列获取的值。如果在此会话中从未为此序列调用nextval,则会报告错误。因为这将返回一个会话本地值,所以它给出了一个可预测的答案,即自当前会话执行nextval之后,其他会话是否执行了nextval
因此,您将获得正确的值。另一方面,序列是非事务性的。每个会话都会获得一个不同的序列值。序列中的更改无法撤消。谢谢,这就是我想知道的:我应该更仔细地检查文档。