Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mybatis-插入事务_Java_Sql_Mybatis - Fatal编程技术网

Java 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

用于插入的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}, #{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


因此,您将获得正确的值。另一方面,序列是非事务性的。每个会话都会获得一个不同的序列值。序列中的更改无法撤消。

谢谢,这就是我想知道的:我应该更仔细地检查文档。